可通过 signal.aborted 属性同步检测中止状态:创建时为 false,abort() 后永久变为 true;需先判空,不可用于区分多操作触发源;清理逻辑应监听 abort 事件。

可以通过检查 AbortSignal 实例的 aborted 属性来检测它是否已被触发。该属性是只读布尔值,一旦信号被中止(例如调用 controller.abort()),它立即变为 true,且不可逆。
直接读取 aborted 属性
这是最简单、最常用的方式,适用于同步判断:
-
signal.aborted返回 true 表示请求已被取消,可提前退出逻辑 - 该属性在信号创建时为 false,中止后永久为 true
- 无需监听事件,适合在 fetch 前、或请求中间逻辑中快速判断
示例:
const controller = new AbortController();const signal = controller.signal;
// ……某些条件触发取消
controller.abort();
console.log(signal.aborted); // true
监听 abort 事件
当需要在中止发生时执行清理操作(如关闭 WebSocket、释放资源),应使用事件监听:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 通过
signal.addEventListener('abort', handler)注册回调 - 回调中可安全访问
signal.aborted === true - 注意:事件只会触发一次,且不会重复派发
示例:
signal.addEventListener('abort', () => {console.log('请求已取消,执行清理');
// 如:clearTimeout(timerId);
});
在 fetch 中结合使用
fetch 自动响应 AbortSignal,但你仍可在发起前或 then/catch 外主动检查:
- 发起前检查:
if (signal.aborted) return;避免无意义请求 - fetch 拒绝后捕获
AbortError(注意:不是所有环境都抛出标准 AbortError,需兼容判断) - 推荐写法:
catch(err => { if (err.name === 'AbortError') { /* 取消处理 */ } })
注意事项
以下情况容易误判,需特别留意:
-
signal为null或undefined时,不能直接访问aborted,应先做存在性判断 - 不要依赖
signal.throwIfAborted()来“检测”——它只在已中止时抛错,不返回状态 - 多个异步操作共用同一 signal 时,任一中止都会使
aborted为 true,无法区分由谁触发
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










