Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

AbortSignal: timeout() statische Methode

Baseline 2024
Neu verfügbar

Seit April 2024 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

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

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

Das Signal bricht bei einem Timeout mit einem TimeoutError DOMException ab.

Das Timeout basiert auf der aktiven Zeit und nicht auf der verstrichenen Zeit und wird effektiv angehalten, wenn der Code in einem angehaltenen Worker ausgeführt wird oder während das Dokument im Back-Forward-Cache ("bfcache") ist.

Um mehrere Signale zu kombinieren, können Sie AbortSignal.any() verwenden, zum Beispiel, um einen Download direkt entweder mit einem Timeout-Signal oder durch Aufruf 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 zwischen 0 und Number.MAX_SAFE_INTEGER liegen.

Rückgabewert

Ein AbortSignal.

Das Signal wird mit seiner AbortSignal.reason Eigenschaft, die auf einen TimeoutError DOMException gesetzt ist, bei einem Timeout abgebrochen.

Beschreibung

AbortSignal.timeout() bietet keine Möglichkeit, seinen Timeout zu kündigen. Das frühzeitige Beenden der Operation oder das Abbrechen eines anderen Signals, das mit ihm über AbortSignal.any() kombiniert wurde, beendet den Timeout nicht.

Solange der Timeout noch aussteht, bleibt das Signal am Leben, wenn es abort Ereignislistener hat. Entfernen Sie Listener, die von Ihrem Code hinzugefügt wurden, wenn sie nicht mehr benötigt werden, anstatt zu warten, bis der Timeout abläuft. Das Erstellen von langen Timeouts mit Listenern kann die Speicherbereinigung verhindern, selbst nachdem der Anwendungscode seine Verweise auf das Signal gelöscht hat.

Das Unzugänglichwerden des AbortSignal garantiert nicht die Beendigung des Timeouts. Wenn die Ressourcen begrenzt sind und Sie Timeouts vorzeitig definitiv beenden möchten, verwenden Sie einen AbortController mit setTimeout() und rufen Sie clearTimeout() auf, wenn die Operation beendet ist.

Beispiele

Unten ist ein Beispiel, das eine Fetch-Operation zeigt, 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 "Stopp"-Button im Browser 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

Spezifikation
DOM
# ref-for-dom-abortsignal-timeout①

Browser-Kompatibilität