You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AbortController无法取消axios.get请求的问题求助

问题分析与解决方案

你的问题出在调用abort()的时机太早——axios发起请求时需要完成内部初始化流程(比如创建请求实例、绑定AbortSignal),你在调用axios.get()后立刻执行c.abort(),此时请求还没完成信号绑定,取消指令自然无法生效,最终只能等到超时。

修正后的代码示例

方式1:延迟触发取消

给请求留一点初始化时间,再执行取消操作:

const c = new AbortController();

// 发起请求并捕获错误
const request = axios.get("https://www.google.com:81", { signal: c.signal })
  .catch(err => {
    if (err.name === 'CanceledError') {
      console.log('请求已成功取消');
    } else {
      console.log('请求超时或其他异常');
    }
  });

// 延迟触发取消,确保请求已完成信号绑定
setTimeout(() => {
  c.abort();
}, 100);

方式2:异步等待初始化完成

通过短暂的异步等待,确保请求完成信号绑定后再取消:

async function testRequestCancel() {
  const c = new AbortController();
  const requestPromise = axios.get("https://www.google.com:81", { signal: c.signal });

  // 等待10ms,给请求初始化留足时间
  await new Promise(resolve => setTimeout(resolve, 10));
  
  c.abort();

  try {
    await requestPromise;
  } catch (err) {
    console.log(err.name); // 会输出 CanceledError,说明取消生效
  }
}

testRequestCancel();

额外注意点

  • 确保你的axios版本在0.22.0及以上,该版本开始原生支持AbortController,低版本需使用已废弃的CancelToken方案。

内容的提问来源于stack exchange,提问作者Nicolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:40:30