TaskSignal: any() 靜態方法
注意:此功能在 Web Workers 中可用。
TaskSignal.any() 靜態方法接受一個 AbortSignal 物件的可迭代物件,並返回一個 TaskSignal。當任何一個 abort 訊號被中止時,返回的任務訊號也會被中止。
當任務訊號被中止時,其 reason 屬性將被設定為導致其中止的第一個訊號的原因。
語法
js
TaskSignal.any(signals)
TaskSignal.any(signals, init)
引數
signalsinit可選-
包含可選的配置引數。目前只定義了一個屬性:
priority可選-
以下之一:
- 一個 優先順序 字串,可以是
user-blocking、user-visible和background之一。 - 一個
TaskSignal。
- 一個 優先順序 字串,可以是
返回值
一個 TaskSignal 例項。當傳遞到 signals 中的第一個訊號被中止時,它將被中止。當發生這種情況時
示例
使用 TaskSignal.any()
此示例演示瞭如何結合使用來自 TaskController 的訊號和來自 TaskSignal.timeout() 的超時訊號。
js
const cancelDownloadButton = document.getElementById("cancelDownloadButton");
const userCancelController = new TaskController({
priority: "user-visible",
});
cancelDownloadButton.addEventListener("click", () => {
userCancelController.abort();
});
// Timeout after 5 minutes
const timeoutSignal = TaskSignal.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 = TaskSignal.any([
userCancelController.signal,
timeoutSignal,
]);
try {
const res = await fetch(someUrlToDownload, {
// Stop the fetch when any of the
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-tasksignal-any |
瀏覽器相容性
載入中…