vue强行中断还未响应的请求

之前遇到的一个问题做个记录。

问题

需求:在切换页面的时候,需要中断上一页还未响应的请求。

思路

解决思路:axios的CancelToken可以用来取消请求。

把每个请求的CancelToken都挂到Vue上面,在切换路由前,逐个调用,取消请求

方法实现

request.js(axios的封装)

service.interceptors.request.use(
  config => {
    if (sessionStorage.getItem('access_token')) {
      // 让每个请求携带token-- ['Authorization']为自定义key 请根据实际情况自行修改
      config.headers['Authorization'] = 'Bearer ' + sessionStorage.getItem('access_token');
    }
    //强行中断请求要用到的
    config.cancelToken = new CancelToken(c => {  
      Vue.$httpRequestList.push(c);
    })
    return config
  },
  error => {
    // for debug
    console.log(error) 
    if (error.message == "interrupt") {
      console.log('已中断请求');
      return;
    } else {
      return Promise.reject(error)
    }
  }
)

main.js

//路由切换检测是否强行中断,
router.beforeEach((to, from, next) => {
  //强行中断时才向下执行
    if(Vue.$httpRequestList.length>0){        
        Vue.$httpRequestList.forEach(item=>{
          //给个标志,中断请求
            item('interrupt');
        })  
    }
    next();    
});

参考资料

Vue切换页面时中断axios请求