当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()

})

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐