AbortSignal: any() 靜態方法
注意:此功能在 Web Workers 中可用。
AbortSignal.any() 靜態方法接受一個 abort signals 可迭代物件,並返回一個 AbortSignal。當輸入的任何一個 abort signal 被中止時,返回的 abort signal 也會被中止。其 中止原因 將被設定為第一個被中止的訊號的原因。如果給定的任何 abort signals 已經被中止,那麼返回的 AbortSignal 也會被中止。
語法
js
AbortSignal.any(iterable)
引數
返回值
一個 AbortSignal,它:
- 已中止,如果給定的 abort signals 中有任何一個已經被中止。返回的
AbortSignal的原因將設定為第一個已被中止的 abort signal 的reason。 - 非同步中止,當
iterable中的任何一個 abort signal 被中止時。其reason將被設定為第一個被中止的 abort signal 的原因。
示例
使用 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 |
瀏覽器相容性
載入中…