首页 > 移动平台 > 详细

使用axios 的 cancelToken 取消重复请求

时间:2021-08-10 23:21:32      阅读:28      评论:0      收藏:0      [点我收藏+]
let pending = []; //声明一个数组用于存储每个请求的取消函数和axios标识
let cancelToken = axios.CancelToken;
let removePending = (config) => {
 for(let p in pending){
  if(pending[p].u === config.url + JSON.stringify(config.data) + ‘&‘ + config.method) { //当当前请求在数组中存在时执行函数体
   pending[p].f(); //执行取消操作
   pending.splice(p, 1); 
  }
 }
}

// http请求拦截器
axios.interceptors.request.use(config => {
  removePending(config) //在一个axios发送前执行一下取消操作
   config.cancelToken = new cancelToken(c => {
  // 这里的axios标识我是用请求地址&请求方式拼接的字符串,当然你可以选择其他的一些方式
      pending.push({ url: config.url + JSON.stringify(config.data) + ‘&‘ + config.method, f: c })
    })
return Promise.resolve(config)
}, error => {
 return Promise.reject(error)
})

// http响应拦截器
axios.interceptors.response.use(data => { 
 
 removePending(data.config); //在一个axios响应后再执行一下取消操作,把已经完成的请求从pending中移除
 
 return Promise.resolve(data)
 
}, error => {
 //需要注意的是一定要区分是普通接口异常还是使用了取消函数
  if (axios.isCancel(error)) {
      return Promise.reject(error);
    } else {
      return Promise.reject(error);
    }
})

 

使用axios 的 cancelToken 取消重复请求

原文:https://www.cnblogs.com/MrSlow/p/15125490.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!