vue3项目中 axios取消上一个路由的pending
遇到一种场景 A详情页在pending时跳转到B详情页两个详情页相同,打开B详情页时,会先显示B的数据等A的pending结束后再闪显A的数据。第二步:在router.js页面。第一步:在axios.js页面。
·
遇到一种场景 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的请求
}
});
更多推荐
所有评论(0)