AbortSignal:any() 静态方法
Baseline
2024
Newly available
Since March 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
备注: 此特性在 Web Worker 中可用。
AbortSignal.any() 静态方法接收一个中止信号的可迭代对象,并返回一个 AbortSignal。当输入的可迭代对象中的任何一个中止信号被中止时,返回的中止信号也会被中止。中止原因将被设置为第一个被中止的信号的中止原因。如果给定的中止信号中有任何一个已经被中止,那么返回的 AbortSignal 也将是已中止状态。
语法
js
AbortSignal.any(iterable)
参数
返回值
AbortSignal,其状态为:
- 已中止,如果给定的中止信号中有任何一个已经被中止。返回的
AbortSignal的reason将被设置为第一个已中止的中止信号的reason。 - 异步中止,当
iterable中的任何中止信号被中止时。reason将被设置为第一个被中止的中止信号的中止原因。
示例
>使用 AbortSignal.any()
此示例演示了如何将来自 AbortController 的信号与来自 AbortSignal.timeout 的超时信号组合在一起。
js
const cancelDownloadButton = document.getElementById("cancelDownloadButton");
const userCancelController = new AbortController();
cancelDownloadButton.addEventListener("click", () => {
userCancelController.abort();
});
// 5 分钟后超时
const timeoutSignal = AbortSignal.timeout(1_000 * 60 * 5);
// 当用户点击取消按钮或 5 分钟时间到时(以先发生者为准),此信号将中止
const combinedSignal = AbortSignal.any([
userCancelController.signal,
timeoutSignal,
]);
try {
const res = await fetch(someUrlToDownload, {
// 当任何信号中止时停止 fetch
signal: combinedSignal,
});
const body = await res.blob();
// 对下载的内容进行处理:
// …
} catch (e) {
if (e.name === "AbortError") {
// 被用户取消
} else if (e.name === "TimeoutError") {
// 向用户显示下载超时
} else {
// 其他错误,例如网络错误
}
}
规范
| Specification |
|---|
| DOM> # dom-abortsignal-any> |