AbortSignal: any() 静态方法
注意:此功能在Web Workers中可用。
AbortSignal.any()
静态方法接收一个中止信号的可迭代对象并返回一个AbortSignal
。当输入的可迭代中止信号中的任何一个中止时,返回的中止信号将中止。 中止原因 将设置为第一个中止信号的原因。如果给定的任何中止信号已中止,则返回的AbortSignal
也将中止。
语法
js
AbortSignal.any(iterable)
参数
返回值
一个AbortSignal
,其
- 已中止,如果给定的任何中止信号已中止。返回的
AbortSignal
的原因将已设置为第一个已中止的中止信号的reason
。 - 异步中止,当
iterable
中的任何中止信号中止时。reason
将设置为第一个中止的中止信号的原因。
示例
使用 AbortSignal.any()
此示例演示了如何结合来自AbortController
的信号和来自AbortSignal.timeout
的超时信号。
js
const cancelDownloadButton = document.getElementById("cancelDownloadButton");
const userCancelController = new AbortController();
cancelDownloadButton.addEventListener("click", () => {
userCancelController.abort();
});
// Timeout after 5 minutes
const timeoutSignal = AbortSignal.timeout(1_000 * 60 * 5);
// This signal will abort when either the user clicks the cancel button or 5 minutes is up
// whichever is sooner
const combinedSignal = AbortSignal.any([
userCancelController.signal,
timeoutSignal,
]);
try {
const res = await fetch(someUrlToDownload, {
// Stop the fetch when any of the signals aborts
signal: combinedSignal,
});
const body = await res.blob();
// Do something with downloaded content:
// ...
} catch (e) {
if (e.name === "AbortError") {
// Cancelled by the user
} else if (e.name === "TimeoutError") {
// Show user that download timed out
} else {
// Other error, e.g. network error
}
}
规范
规范 |
---|
DOM 标准 # dom-abortsignal-any |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。