axios封装之避免重复url请求

该博客介绍了如何在axios中通过CancelToken和Map数据结构来避免因用户连续点击导致的重复HTTP请求。通过创建一个Map来存储请求的CancelToken,并在请求拦截器中检查并取消已存在的相同请求,从而优化性能。
摘要由CSDN通过智能技术生成

用途

由于用户连续点击某个按钮或请求某个列表数据,导致同一个请求url进行多次http请求,数据是一样的,浪费不必要的性能,所以在axios中进行请求判断拦截吊

实现方法

  • 使用 axios 中的 CancelToken 进行取消请求
  • 使用 Es6 中的 Map 进行数据判断处理
  • 在 axios 中进行 request 请求拦截

具体代码

第一步:在axios文件中 new 一个 map 对象

因为

const pending = new Map();
第二步:写一个添加方法
//接收两个参数,一个请求的config和一个请求的ul
const addPending = (config:any, url: string) => {
  config.cancelToken = config.cancelToken || new axios.CancelToken(cancel=>{
    if(!pending.has(url)){
    	//向map对象中添加对象,key就是我们的url,value就是cancel
        pending.set(url,cancel)
    }
  })
};
第三步:写一个删除方法
const removePeding = (url: string) => {
  if(pending.has(url)){//判断当前url是否已经在请求
    const cancel = pending.get(url);//拿到cancelToken方法
    cancel(url);//取消请求
    pending.delete(url);//在map对象中删除本次重复请求
  }
}
第四步:对请求进行拦截
axios.interceptors.request.use( (config: any) => {
  const url = [
    config.method,
    config.url,
    JSON.stringify(config.params),
    JSON.stringify(config.data)
  ].join("&");//生成url
    removePeding(url);//判断是否存在请求,有进行取消
    addPending(config,url);//进行添加
  
}, (error: any) => {
  return Promise.reject(error);
});

至此我们的需求就实现了,疯狂点击一个事件去请求一个接口,不会造成重复请求了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值