AbortSignal: timeout() statische Methode

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die AbortSignal.timeout()-statische Methode gibt ein AbortSignal zurück, das nach einer angegebenen Zeit automatisch abgebrochen wird.

Das Signal bricht mit einer TimeoutError-DOMException nach Ablauf der Zeit ab.

Der Timeout basiert auf "aktiver" Zeit anstelle von verstrichener Zeit und wird effektiv pausiert, wenn der Code in einem angehaltenen Worker ausgeführt wird oder wenn sich das Dokument im Vor-Zurück-Cache ("bfcache") befindet.

Um mehrere Signale zu kombinieren, können Sie AbortSignal.any() verwenden, z. B. um einen Download direkt entweder mit einem Timeout-Signal oder durch Aufrufen von AbortController.abort() abzubrechen.

Syntax

js
AbortSignal.timeout(time)

Parameter

time

Die "aktive" Zeit in Millisekunden, bevor das zurückgegebene AbortSignal abbricht. Der Wert muss im Bereich von 0 bis Number.MAX_SAFE_INTEGER liegen.

Rückgabewert

Ein AbortSignal.

Das Signal bricht ab und sein AbortSignal.reason-Eigenschaft wird auf eine TimeoutError-DOMException gesetzt, wenn ein Timeout eintritt, oder auf eine AbortError-DOMException, wenn der Vorgang vom Benutzer ausgelöst wurde.

Beispiele

Unten ist ein Beispiel für eine Fetch-Operation, die nach 5 Sekunden fehlschlägt, falls sie nicht erfolgreich ist. Beachten Sie, dass dies auch fehlschlagen kann, wenn die Methode nicht unterstützt wird, wenn ein Browser-"Stop"-Button gedrückt wird oder aus einem anderen Grund.

js
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") {
    // This exception is from the abort signal
    console.error("Timeout: It took more than 5 seconds to get the result!");
  } else if (err.name === "AbortError") {
    // This exception is from the fetch itself
    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
# ref-for-dom-abortsignal-timeout①

Browser-Kompatibilität