概述
`AbortSignal.timeout(ms)` 创建在指定时间后自动触发的中断信号;`AbortSignal.any([...])` 将多个信号组合,任意一个触发即中断。适用于请求超时与用户取消等情境。
示例
```js
const ctrl = new AbortController()
const signal = AbortSignal.any([ctrl.signal, AbortSignal.timeout(5000)])
try {
const resp = await fetch('/api', { signal })
} catch (e) { /* 处理超时或取消 */ }
// 用户取消
ctrl.abort()
```
工程建议
- 时序与重试:合理设置超时并在必要时重试;避免过短导致失败率上升。
- 组合场景:结合页面卸载、用户交互取消与后台策略;统一中断通道。
- 兼容:特性检测并回退到手动计时器与 `ctrl.abort()`;记录原因。
参考与验证
- MDN AbortController/AbortSignal 文档:https://developer.mozilla.org/docs/Web/API/AbortController
- web.dev 请求中断与超时指南:https://web.dev/articles/abort

发表评论 取消回复