AbortSignal: timeout() statische Methode
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die statische Methode AbortSignal.timeout()
gibt ein AbortSignal
zurück, das nach einer angegebenen Zeit automatisch abbricht.
Das Signal bricht mit einem TimeoutError
-DOMException
bei einem Timeout ab oder mit einer AbortError
-DOMException
aufgrund des Drückens einer Stopptaste im Browser (oder einer anderen integrierten "Stopp"-Operation). Dies ermöglicht es Benutzeroberflächen, Timeout-Fehler, die typischerweise eine Benutzerbenachrichtigung erfordern, von nutzerbedingten Abbrüchen, die dies nicht erfordern, zu unterscheiden.
Der Timeout basiert auf aktiver statt auf vergangener Zeit und wird effektiv pausiert, wenn der Code in einem angehaltenen Worker ausgeführt wird oder während das Dokument im Rückwärts-Vorwärts-Cache ("bfcache") ist.
Um mehrere Signale zu kombinieren, können Sie AbortSignal.any()
verwenden, um beispielsweise einen Download direkt mit einem Timeout-Signal oder durch Aufruf von AbortController.abort()
abzubrechen.
Syntax
AbortSignal.timeout(time)
Parameter
time
-
Die "aktive" Zeit in Millisekunden, bevor das zurückgegebene
AbortSignal
abbricht. Der Wert muss im Bereich zwischen 0 undNumber.MAX_SAFE_INTEGER
liegen.
Rückgabewert
Ein AbortSignal
.
Das Signal wird mit seiner AbortSignal.reason
-Eigenschaft auf einen TimeoutError
-DOMException
bei Timeout gesetzt oder auf einen AbortError
-DOMException
, falls die Operation durch den Benutzer ausgelöst wurde.
Beispiele
Unten sehen Sie ein einfaches Beispiel, das eine Fetch-Operation zeigt, die abbricht, wenn sie nach 5 Sekunden nicht erfolgreich ist. Beachten Sie, dass dies auch fehlschlagen kann, wenn die Methode nicht unterstützt wird, wenn eine Stopptaste im Browser 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