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

Axios中止API请求触发Sentry未处理错误的解决方案求助

处理Axios请求中止导致的Sentry未处理错误

用户切换标签页或刷新页面时,Axios发起的请求会被中止,这类中止错误会被Sentry捕获为未处理错误,导致错误计数虚高。以下是几种解决方法,能让Sentry忽略这类预期内的中止错误:

方法1:用Axios响应拦截器过滤中止错误

在Axios的响应拦截器里识别请求中止的错误(错误码ECONNABORTED),直接返回resolved状态的Promise,不让错误继续向上抛出:

axios.interceptors.response.use(
  response => response,
  error => {
    // 匹配请求中止的错误特征
    if (error.code === 'ECONNABORTED' && error.message.includes('Request aborted')) {
      // 返回空数据或自定义占位内容,避免错误进入全局捕获
      return Promise.resolve({ data: null, message: '请求已中止' });
    }
    // 其他错误正常抛出,交由Sentry处理
    return Promise.reject(error);
  }
);

方法2:在Sentry初始化时过滤错误

如果不想改动Axios逻辑,直接在Sentry的初始化配置里添加过滤规则,忽略这类中止错误:

Sentry.init({
  // 其他初始化配置
  beforeSend(event, hint) {
    const originalError = hint.originalException;
    // 判断是否是Axios请求中止错误
    if (originalError?.code === 'ECONNABORTED' && originalError?.message.includes('Request aborted')) {
      // 返回null,Sentry将不会上报该错误
      return null;
    }
    return event;
  }
});

方法3:修改Axios的abort处理逻辑(自定义标识)

针对你提供的Axios内部request.onabort代码块,可以给中止错误添加自定义标识,后续通过标识过滤:

// 修改Axios中的request.onabort函数
request.onabort = function handleAbort() {
  if (!request) {
    return;
  }

  const abortError = createError('Request aborted', config, 'ECONNABORTED', request);
  // 添加自定义标识,标记为用户操作导致的中止
  abortError.isUserInitiatedAbort = true;

  reject(abortError);
  request = null;
};

然后在全局或Axios拦截器里过滤带该标识的错误:

axios.interceptors.response.use(
  res => res,
  err => {
    if (err.isUserInitiatedAbort) {
      return Promise.resolve();
    }
    return Promise.reject(err);
  }
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:01:15