Axios取消请求(AbortController)

从v0.22.0版本开始,Axios支持使用AbortController来取消请求。在封装后的axios服务中,正确传递signal参数是关键。例如,在get和post请求中,signal应嵌入到配置对象中。同时,如果多个接口共用同一个AbortController,取消一个请求会同时影响其他请求。因此,确保每个请求有独立的AbortController以避免不必要的干扰。
摘要由CSDN通过智能技术生成

Axios取消请求(AbortController)

v0.22.0 开始,Axios 支持以 fetch API 方式—— AbortController 取消请求:

const controller = new AbortController();

axios.get('/foo/bar', {
   signal: controller.signal
}).then(function(response) {
   //...
});
// 取消请求
controller.abort()

注意: CancelToken 从从 v0.22.0 开始已被弃用,不应在新项目中使用。

我们一般在项目中会把 axios 进行二次封装,封装之后如何传递 signal 需要注意下

/**

 \* @description: 获取查看时间

 \* @param {*} formData

 \* @return {*}

 */

$api.getCheckTime = (formData, signal) => {

 let url = `/xxxxx`

 return  $http.get(url, { params: formData, signal },)

}

// 在组件中调用该接口

 /**
   * @description: 获取查看时间
   * @return {*}
   */
  async getTime(uid) {
      
      if (this.abortController) {
          // 如果存在abortController,就取消掉上次的请求,注意不同接口如果使用同一个abortController,则会被abort() 一起取消掉
          this.abortController.abort()
          this.abortController = ""
      } else {
          this.abortController = new AbortController()
      }
      this.abortController = new AbortController()
      let res = await $api.getCheckTime({ card_id: this.cardId, uid }, this.abortController.signal);
  }

如果接口为 post 请求, signal 参数的传递应该为:

axios.post('demo/url', {
    id: 123,
    name: 'Henry',
    signal,
},{
   timeout: 1000,
    ...//其他相关配置
})
    // 如果是二次封装的axios,那可能是:
$http.post(url, {
    id: 123,
    name: 'Henry',
    signal,
})

要谨记Axios不同请求方式传参的方式,本人就是因为没搞清Axios的传值方式,没有成功的将signal传递给Axios,走了很多弯路😭

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值