遇到一种场景 A详情页在pending时跳转到B详情页  两个详情页相同,打开B详情页时,会先显示B的数据等A的pending结束后再闪显A的数据

第一步:在axios.js页面

const cancelTokenSources = new Map(); // 定义cancel队列
// 请求拦截器
axios.interceptors.request.use(
  config => { 
   if(自定义条件哪些路由需要中断pending){
         const source = axios.CancelToken.source();
         cancelTokenSources.set(source.token, source.cancel); // 加入cancel队列
         config.cancelToken = source.token;
         window.cancelTokenSources = cancelTokenSources;//这是关键
    }
    return config;
  }
)
....

// 响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.config.cancelToken) {
      cancelTokenSources.delete(response.config.cancelToken);
    }
},
  error => {
    if (axios.isCancel(error)) {
      cancelTokenSources.delete(error.message)
     }
  }
)

第二步:在router.js页面

router.afterEach(() => { // 路由跳转杀请求
  let _cancelTokenSources = window.cancelTokenSources
  for (const [cancelToken, cancel] of _cancelTokenSources) {
    cancel(cancelToken); // cancel 正在pending的请求
  }
});

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐