TaskSignal: any() statische Methode

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Die TaskSignal.any() statische Methode nimmt ein iterierbares Objekt von AbortSignal-Objekten und gibt ein TaskSignal zurück. Das zurückgegebene Task-Signal wird abgebrochen, wenn eines der Abbruchsignale abgebrochen wird.

Wenn das Task-Signal abgebrochen wird, wird seine reason-Eigenschaft auf den Grund des ersten abgebrochenen Signals gesetzt.

Syntax

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

Parameter

signals

Ein iterierbares Objekt (wie ein Array) von Abbruchsignalen.

init Optional

Enthält optionale Konfigurationsparameter. Derzeit ist nur eine Eigenschaft definiert:

priority Optional

Eine der folgenden Optionen:

  • Ein String, der einer von user-blocking, user-visible und background ist.
  • Ein TaskSignal.

Rückgabewert

Eine TaskSignal-Instanz. Sie wird abgebrochen, wenn das erste in signals übergebene Signal abgebrochen wird. In diesem Fall:

  • Wird ihre reason-Eigenschaft auf den Grund gesetzt, der dieses Signal zum Abbruch gebracht hat.

  • Wird ihre priority-Eigenschaft durch den priority-Parameter bestimmt:

    • Wenn der priority-Parameter ein String war, wird er der Wert des Strings sein.
    • Wenn der priority-Parameter ein TaskSignal war, wird er der Wert der priority dieses Signals sein.

Beispiele

Verwendung von TaskSignal.any()

Dieses Beispiel zeigt die Kombination eines Signals von einem TaskController und eines Zeitüberschreitungssignals von 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
  }
}

Spezifikationen

Specification
Prioritized Task Scheduling
# dom-tasksignal-any

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch