vue2 axios封装优化重复请求

当发送多个相同请求时,只会响应最后一次请求,效果如下。

效果

创建CancelRequest.js文件

export default class CancelRequest {
  pendings = []
  constructor(CancelToken) {
    this.CancelToken = CancelToken
  }
  getCancelToken(config) {
    const { CancelToken } = this
    return new CancelToken((cancel) => {
      const { url, method } = config
      const uKey = `${url}&${method}`
      this.pendings.push({ uKey, cancel })// config.data为请求参数
    })
  }
  removePending(config) {
    const { url, method } = config
    const { pendings } = this
    const uKey = `${url}&${method}`
    const findIndex = pendings.findIndex(p => p.uKey === uKey)
    const pendingsLen = pendings.length
    if (pendingsLen > 50) {
      // 如果pendings存储数量大于50,则释放缓存
      pendings.splice(0, pendingsLen - 2)
    }
    if (findIndex > -1) {
      pendings[findIndex].cancel()
      pendings.splice(findIndex, 1)
    }
  }
}

在axios中引入

// 主要代码
import CancelRequest from './CancelRequest'
const cancelRequest = new CancelRequest(axios.CancelToken)
// .....
service.interceptors.request.use(
	config => {
		/* -----------------------重复请求拦截------------------------- */
		// requestConfig?.skipCancelRequest 对需要重复请求的情况做处理skipCancelRequest为true跳过(用不到可删除)
	    if (!requestConfig?.skipCancelRequest) {
	      cancelRequest.removePending(config)
	      config.cancelToken = cancelRequest.getCancelToken(config)
	    }
	    return config
	}
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值