AbortSignal: timeout() statische Methode
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die AbortSignal.timeout()
statische Methode gibt ein AbortSignal
zurück, das nach einer festgelegten Zeit automatisch abbricht.
Das Signal bricht bei einem Timeout mit einem TimeoutError
DOMException
ab oder mit AbortError
DOMException
, wenn die Stopptaste des Browsers gedrückt wird (oder eine andere eingebaute „Stopp“-Operation). Dies ermöglicht es Benutzeroberflächen, Timeout-Fehler, die typischerweise eine Benachrichtigung des Benutzers erfordern, von Benutzer-abgebrochenen Operationen zu unterscheiden, die dies nicht tun.
Das Timeout basiert auf aktiver anstatt auf verstrichener Zeit und wird effektiv pausiert, wenn der Code in einem angehaltenen Worker läuft oder während das Dokument in einem Vorwärts-Rückwärts-Cache ("bfcache") ist.
Um mehrere Signale zu kombinieren, können Sie AbortSignal.any()
verwenden, um beispielsweise direkt einen Download abzubrechen, entweder durch ein Timeout-Signal oder durch Aufruf von AbortController.abort()
.
Syntax
AbortSignal.timeout(time)
Parameter
time
-
Die „aktive“ Zeit in Millisekunden, bevor das zurückgegebene
AbortSignal
abbricht. Der Wert muss im Bereich von 0 undNumber.MAX_SAFE_INTEGER
liegen.
Rückgabewert
Ein AbortSignal
.
Das Signal wird mit seiner AbortSignal.reason
Eigenschaft auf einen TimeoutError
DOMException
beim Timeout oder auf einen AbortError
DOMException
, wenn die Operation vom Benutzer ausgelöst wurde, abgebrochen.
Beispiele
Unten ist ein Beispiel für eine Fetch-Operation, die nach 5 Sekunden abbricht, wenn sie erfolglos bleibt. Beachten Sie, dass dies auch fehlschlagen kann, wenn die Methode nicht unterstützt wird, wenn eine „Stop“-Taste des Browsers gedrückt wird oder aus einem anderen Grund.
const url = "https://path_to_large_file.mp4";
try {
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
const result = await res.blob();
// …
} catch (err) {
if (err.name === "TimeoutError") {
console.error("Timeout: It took more than 5 seconds to get the result!");
} else if (err.name === "AbortError") {
console.error(
"Fetch aborted by user action (browser stop button, closing tab, etc.",
);
} else if (err.name === "TypeError") {
console.error("AbortSignal.timeout() method is not supported");
} else {
// A network error, or some other problem.
console.error(`Error: type: ${err.name}, message: ${err.message}`);
}
}
Spezifikationen
Specification |
---|
DOM Standard # ref-for-dom-abortsignal-timeout① |
Browser-Kompatibilität
BCD tables only load in the browser