axios实现中断请求

文章讲述了在查询数据列表时,通过在请求之前检测并取消重复请求,减少不必要的网络请求,从而提升性能,避免快速请求被较慢请求覆盖。作者使用axios的CancelToken和请求拦截器实现了这个优化策略。
摘要由CSDN通过智能技术生成

情景:查询数据列表的时候,请求时间长,筛选条件的时候,多次请求,导致请求慢的数据覆盖请求快的数据

1.多次请求数据时,保留最后一个请求,前面的请求取消掉。 

刚开始百度搜到的是在响应拦截器中移除请求,但是我在测试的时候发现在响应中拦截取消的请求可能是最后一个,所以改成了在请求之前就判断有没有重复的请求,有的话就先取消重复的请求,在发起最后一个请求。

let pending = []; // 创建一个数组保存所有取消请求的cancel方法和请求url
const CancelToken = axios.CancelToken; // 获取axios的CancelToken 
// 清除请求方法
const removePending = (config) => {
    for (const p in pending) {
        // 判断url是否重复,重复择取消请求,
        if (pending[p].url === config.url && config.url == '/admin/resource/dataset') {
            pending[p].fun(); // 执行取消
        }
    }
    pending = pending.filter(item => item.url !== config.url)// 过滤掉已经返回的请求
}
// request拦截器
service.interceptors.request.use(config => {
    removePending(config)
    config.cancelToken = new CancelToken(executor => {
        pending.push({url: config.url, fun: executor});
    })
 });

 实现效果就是这样:

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值