Axios abort 请求

一、Axios 请求传参

  1. 新建 AbortController 实例,实例的 signal 作为 Axios 请求的参数。
  2. 创建 Axios 请求,请求参数中传入 signal。
let abortController = new AbortController(), // Axios Controller 实例

const config = {
    requestParams,
    headers,
    timeout,
    signal: abortController.signal,	// 传入的 signal
    onUploadProgress,
};

// Get 请求
this.axios
  .get(url, config)
  .then((res: any) => {
    this.resultHandle(res, resolve, loading);
  })
  .catch((err: { message: any }) => {
    reject(err.message);
  });

// Post 请求
this.axios
  .post(url, bodyParams, config)
  .then((res: any) => {
      this.resultHandle(res, resolve, loading);
  })
  .catch((err: any) => {
      reject(err);
  });

二、abort 请求

为防止 AbortController 实例异常,在外面加了 trycatch 捕获异常情况。

try {
    abortController && abortController.abort();
} catch (error) {
    console.log('Abort Error', error);
}

三、abort 多个并行的请求,和 abort 一个请求一致。

  1. abortController 实例只用创建一次
  2. 每个请求的参数中传入该实例的 signal
  3. abort 方法调用一次,所有并行请求都会 Cancel

四、异常情况

当 abort 一次请求后,重新调用接口无响应。
原因:abortController.signal.aborted 初始化的时候是 false,
在这里插入图片描述
当 abort 调用后,该状态变成 true,这个状态下再次发请求会无响应。
在这里插入图片描述
解决方法:由于该属性是只读属性,无法对该状态进行重置。
可以在创建请求前,更新 abortController 实例,
像这样 abortController = new AbortController(); 给实例重新赋值。
注意:并行请求的情况,在并行请求创建前更新一次。

五、总结

  1. Axios 接口 abort 请求,依赖于 AbortController 实例的 abort 方法。
  2. 单个和并行的请求,只需创建一次 AbortController 实例。Axios abort 请求,abort 方法只需调用一次。
  3. 在接口请求之前更新 AbortController 实例,防止实例 signal.aborted 状态为 true,导致的接口无响应。
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值