vue axios 封装请求,用户过期时及时中断后续请求

1.使用vuex全局变量存取
const store = new Vuex.Store ({
  state: {
    axiosCancelArr: []
  },
  mutations: {
    PUSH_CANCEL(state, cancel) {
      state.axiosCancelArr.push(cancel.cancelToken)
    },
    CLEAR_CANCEL(state) {
      state.axiosCancelArr.forEach(e => {
        e && e()
      })
      state.axiosCancelArr = []
    }
  },
  actions: {
    pushCancel({ commit }, cancel) {
      commit('PUSH_CANCEL', cancel)
    },
    clearCancel({ commit }) {
      commit('CLEAR_CANCEL')
    }
  }
})
export default store2.request.js关键代码
//请求拦截器
axios.interceptors.request.use(res => {  
	res.cancelToken = new axios.CancelToken(cancel => {
	    store.dispatch('pushCancel', { cancelToken: cancel })  
	    })
    }
)
//响应拦截器
axios.interceptors.response.use(res => {  
	const data = res.data  //判断是否取消后续请求  
	if (data.code === '401') {    
		store.dispatch('clearCancel') 
	}
})
 
3.使用路由拦截器,跳转路由时调用clearCancel方法,清空存入的信息,终止未请求成功的请求
router.beforeEach((to, from, next) => {  store.dispatch('clearCancel') next()}

你可能感兴趣的:(vue.js,前端,javascript)