被取消的请求需主动识别并手动上报日志,使用abortcontroller检测aborterror(name==='aborterror')或axios旧版的error.code==='econnaborted',避免模糊匹配和误报,日志中应明确标记reason:'aborted'及上下文。

被取消的请求默认不会触发 catch,也不会进入错误日志——因为取消不是错误,而是正常控制流。想在错误日志中记录“请求被取消”,关键在于**主动识别取消并手动上报**,而不是依赖网络异常捕获。
使用 AbortController 检测取消并手动记录
现代 fetch 支持 signal,当调用 abort() 时,fetch 会抛出 AbortError(类型为 DOMException,name === 'AbortError')。这是唯一可靠、标准化的取消信号。
- 在
catch中判断错误是否为AbortError,是则视为“被取消”,可打点或写入错误日志 - 避免用
error.message.includes('cancel')等模糊匹配,不同浏览器提示不一致(如 Chrome 是 "The user aborted a request.",Firefox 是 "The operation was aborted.") - 建议封装统一的请求函数,在错误处理分支中集中判断和上报
避免误报:区分取消和其他错误
取消日志需明确标记来源,防止干扰真实故障排查。推荐在日志中加入上下文字段:
-
reason: 'aborted'或type: 'cancellation' -
url、method、initiator(如页面跳转、用户点击“取消”按钮) - 可选:添加
timestamp和traceId方便关联前端行为
注意:Axios 用户需额外适配
Axios v0.22+ 原生支持 AbortController,取消行为与 fetch 一致;但旧版本依赖 CancelToken,其错误对象是 AxiosError,且 error.code === 'ECONNABORTED'。若仍在用旧版:
- 升级到支持 AbortController 的版本更可持续
- 若暂不能升级,需在
catch中检查error.code === 'ECONNABORTED'并单独处理 - 注意:CancelToken 已废弃,不再推荐新项目使用
不推荐的做法
以下方式不可靠或违背设计意图:
- 监听
onabort回调(XMLHttpRequest 有,但 fetch 没有;且该回调不传错误对象,无法区分原因) - 在请求发起前打“即将取消”日志(可能根本没发出去,或取消逻辑未执行)
- 把所有
catch都记为错误(会污染日志,掩盖真实问题)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











