封装一个可手动取消的axios请求

需求描述: 在这里插入图片描述
文件上传过程中,不断请求一个接口,获取实时的导入结果,并以进度条的形式展示在页面上。

思路: 设置计时器,不断向后台发起请求,一旦返回的请求结果为100%就清除计时器,这时会有大量正在pending中的请求,会占用大量的资源,需要手动取消请求。

封装请求: 以get请求为例,与普通请求相比会多设置一个cancelTaken

export const getRequestCanCancel = (url, params, that) => {
    let accessToken = Cookies.get('accessToken');
    return axios({
        method: 'get',
        url: `${ApiBaseUrl}${url}`,
        params: params,
        cancelToken: new axios.CancelToken(function executor(c) { // 设置 cancel token
            that.source = c; //这里的source为使用接口的页面设置的,需要取消请求的时候直接调用在这里已被赋值为函数的source就行了
        }),
        headers: {
            'Authorization': accessToken
        }
    });
};

接口:

export const analysisResumeNum = (params, that) => {
    return getRequestCanCancel('/analysisResumeNum', params, that)
}

data中初始化sourcenull

data{
	return {
		successNum: 0,
      	totalNum: 0,
		guId: null,
		myInterval: null,
		source: null
	}
}

接口应用:

getAnalysisResumeGuId() {
      let that = this;
      that.myInterval = setInterval(() => {
        analysisResumeNum({guId: that.guId}, that).then(res => {  // 
          if(res.success) {
            that.successNum = Number(res.result);
            if(that.totalNum == that.successNum) { //符合条件后清除计时器,然后终止未完成请求
              clearInterval(that.myInterval);
              that.cancelRequest();
            }
          }
        })
      }, 50);
},
cancelRequest() {
      if (typeof this.source === 'function') {  // 先判断source是否已被设置为函数
          this.source('终止请求'); // 调用source函数以终止请求
      }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值