之前遇到的一个问题做个记录。
问题
需求:在切换页面的时候,需要中断上一页还未响应的请求。
思路
解决思路: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();    
});