TaskSignal: any() 靜態方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

注意:此功能在 Web Workers 中可用。

TaskSignal.any() 靜態方法接受一個 AbortSignal 物件的可迭代物件,並返回一個 TaskSignal。當任何一個 abort 訊號被中止時,返回的任務訊號也會被中止。

當任務訊號被中止時,其 reason 屬性將被設定為導致其中止的第一個訊號的原因。

語法

js
TaskSignal.any(signals)
TaskSignal.any(signals, init)

引數

signals

一個 abort 訊號的 可迭代物件(例如 Array)。

init 可選

包含可選的配置引數。目前只定義了一個屬性:

priority 可選

以下之一:

  • 一個 優先順序 字串,可以是 user-blockinguser-visiblebackground 之一。
  • 一個 TaskSignal

返回值

一個 TaskSignal 例項。當傳遞到 signals 中的第一個訊號被中止時,它將被中止。當發生這種情況時

  • 它的 reason 屬性將被設定為導致此訊號中止的訊號的原因。

  • 它的 priority 屬性將由 priority 引數確定。

    • 如果 priority 引數是字串,它將是該字串的值。
    • 如果 priority 引數是 TaskSignal,它將是該訊號的 priority 的值。

示例

使用 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

瀏覽器相容性

另見