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

为何fetch使用AbortSignal.timeout()始终返回AbortError而非TimeoutError?

问题解答:fetch超时抛出AbortError而非TimeoutError的原因

问题复现代码

const getData = async function () {
  try {
    const response = await fetch(`${API_URL}/cars`, {
      signal: AbortSignal.timeout(5_000),
    });

    console.log(response);
  } catch (err) {
    console.log(err.name); //AbortError
    console.dir(err);
  }
};

getData();

问题现象

上述代码通过AbortSignal.timeout()为fetch请求设置超时逻辑,根据MDN文档定义:

  • 超时触发时应抛出TimeoutError
  • 浏览器内置停止操作(如点击停止按钮、关闭标签页)触发中止时,才会抛出AbortError

但实际测试中,无论采用何种超时场景(慢3G节流+100ms超时、服务器10秒响应+9000ms超时),始终只会捕获到AbortError(错误消息为"The user aborted a request."),从未出现预期的TimeoutError。

问题范围与现状

  • 该问题仅出现在Chromium内核浏览器(如Google Chrome、Microsoft Edge)以及Safari浏览器中,Firefox浏览器的表现完全符合MDN文档描述。
  • 目前该问题已在对应浏览器项目提交bug报告:
    • Chromium项目
    • Safari项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:47:16