TaskSignal: any() statische Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
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 Signal, das abgebrochen wurde, gesetzt.
Syntax
TaskSignal.any(signals)
TaskSignal.any(signals, init)
Parameter
signals-
Ein iterierbares Objekt (wie ein
Array) von Abbruchsignalen. initOptional-
Enthält optionale Konfigurationsparameter. Derzeit ist nur eine Eigenschaft definiert:
priorityOptional-
Eine der folgenden:
- Ein Prioritätsstring, der einer von
user-blocking,user-visibleundbackgroundist. - Ein
TaskSignal.
- Ein Prioritätsstring, der einer von
Rückgabewert
Eine TaskSignal-Instanz. Diese wird abgebrochen, wenn das erste Signal, das in signals übergeben wird, abgebrochen wird. Wenn dies passiert:
-
Seine
reason-Eigenschaft wird auf den Grund des Signals gesetzt, das dieses Signal zum Abbruch gebracht hat. -
Seine
priority-Eigenschaft wird durch denpriority-Parameter bestimmt:- Wenn der
priority-Parameter ein String war, wird er der Wert des Strings sein. - Wenn der
priority-Parameter einTaskSignalwar, wird er der Wert derpriority-Eigenschaft dieses Signals sein.
- Wenn der
Beschreibung
Die Überlegungen zur Bereinigung von Abbruchsignalen, die für AbortSignal.any() beschrieben wurden, gelten auch für TaskSignal.any(). Es gibt keine Methode, um das zurückgegebene Signal von seinen Eingangssignalen abzumelden, und das Abbrechen des Signals führt nicht zum Abbruch der anderen Eingangssignale oder zur Stornierung ihrer Zeitlimits.
Wenn init.priority ein Signal mit einer veränderbaren Priorität ist, bleibt das zurückgegebene Signal auch am Leben, solange es eine Prioritätsquelle hat und entweder prioritychange-Listener oder interne Prioritätsänderungsschritte, die von einer API registriert wurden, hat. Entfernen Sie Listener, die Ihr Code hinzugefügt hat, wenn sie nicht mehr benötigt werden. Das Abbrechen des Signals entfernt nicht die prioritychange-Listener und verhindert nicht, dass es Prioritätsänderungen folgt.
Beispiele
>Verwenden von TaskSignal.any()
Dieses Beispiel zeigt die Kombination eines Signals von einem TaskController mit einem Timeout-Signal von TaskSignal.timeout().
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") {
// Canceled by the user
} else if (e.name === "TimeoutError") {
// Show user that download timed out
} else {
// Other error, e.g. network error
}
}
Spezifikationen
| Spezifikation |
|---|
| Prioritized Task Scheduling> # dom-tasksignal-any> |