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

js
AbortSignal.timeout(time)

Parameter

time

Die „aktive“ Zeit in Millisekunden, bevor das zurückgegebene AbortSignal abbricht. Der Wert muss im Bereich von 0 und Number.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.

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") {
    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