axios取消重复请求

本文介绍了如何使用CancelToken在axios中取消重复的HTTP请求,以防止不必要的资源消耗和请求间的干扰。通过创建一个httpRequest类,实现了在请求拦截器中保存并管理请求,当检测到重复请求时,取消先前的请求,确保每次只有一个请求在进行。
摘要由CSDN通过智能技术生成

遇到问题:

1.多次重复请求浪费资源

2.切换标签之前未完成的请求或许会影响当前标签内容

取消重复请求:

保存一个请求的对象,重复url直接CancelToken

class httpRequest {
  constructor() {
    this.pending = {}
  }

  interceptors(instance, url) {
    instance.interceptors.request.use(
      config => {
        const key = config.baseURL + config.url + '&' + config.method
        config.cancelToken = new Axios.CancelToken((cancel) => {
          this.pending[key] = cancel
        })
        this.handlePending(key, true)
        return config
      },
    )
    instance.interceptors.response.use(
      res => {
        const key = res.config.url + '&' + res.config.method
        this.handlePending(key)
        return res
      }
    )
  }

  handlePending(key, isRequest = false) {
    if (this.pending[key] && isRequest) {
      this.pending[key]('cancel repeat')
    }
    if (this.pending[key]) {
      delete this.pending[key]
    }
  }
}

export default httpRequest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值