vue 断开正在发送的请求_vue切换页面取消未完成接口请求
当vue切换页面时,尚未完成的接口由于异步原因,会造成报错等等问题,那么这时需要去取消这些接口的执行首先思路:页面A请求接口axios1 -->axios创建CancelToken对象保存请求至store变量CancelTokenArr -->当切换至页面B -->进入全局路由守卫调用vuex的清除CancelTokenArr方法 -->遍历CancelTokenArr清除
当vue切换页面时,尚未完成的接口由于异步原因,会造成报错等等问题,那么这时需要去取消这些接口的执行
首先思路:
页面A请求接口axios1 -->
axios创建CancelToken对象保存请求至store变量CancelTokenArr -->
当切换至页面B -->
进入全局路由守卫调用vuex的清除CancelTokenArr方法 -->
遍历CancelTokenArr清除
涉及的库
axios
vuex
vue-router
++axios++
import store from '../store'
let cancelTokenArr=[] //储存cancel token
// request拦截器
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['X-Token'] = getToken()
// 在发送请求设置cancel token
config.cancelToken = new axios.CancelToken(cancel => {
store.commit('PUSH_CANCEL', {
cancelToken: cancel
})
})
}
return config
},
error => {
console.log(error) // for debug
Promise.reject(error)
}
)
++vuex++
const axios = {
state: {
cancelTokenArr: []
},
mutations: {
PUSH_CANCEL(state, payload){
state.cancelTokenArr.push(payload.cancelToken);
},
CLAER_CANCEL({cancelTokenArr}){
cancelTokenArr.forEach(item => {
item('路由跳转取消请求');
});
cancelTokenArr = [];
}
}
}
export default user
++router++
import store from './store'
router.beforeEach((to, from, next) => {
store.commit('CLAER_CANCEL'); // 取消请求
next()
})
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)