AbortController

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2019.

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

Das AbortController-Interface stellt ein Controller-Objekt dar, das Ihnen ermöglicht, eine oder mehrere Web-Anfragen bei Bedarf abzubrechen.

Sie können ein neues AbortController-Objekt mit dem AbortController()-Konstruktor erstellen. Die Kommunikation mit einer asynchronen Operation erfolgt über ein AbortSignal-Objekt.

Konstruktor

AbortController()

Erstellt eine neue Instanz eines AbortController-Objekts.

Instanz-Eigenschaften

AbortController.signal Schreibgeschützt

Gibt eine Instanz eines AbortSignal-Objekts zurück, das zur Kommunikation mit oder zum Abbruch einer asynchronen Operation verwendet werden kann.

Instanz-Methoden

AbortController.abort()

Bricht eine asynchrone Operation ab, bevor sie abgeschlossen ist. Dies kann fetch-Anfragen, den Verbrauch von Antwortinhalten und Strömen abbrechen.

Beispiele

Hinweis: Es gibt zusätzliche Beispiele in der AbortSignal Referenz.

Im folgenden Beispiel versuchen wir, ein Video mit der Fetch API herunterzuladen.

Zunächst erstellen wir einen Controller mit dem AbortController()-Konstruktor und greifen dann auf ein zugehöriges AbortSignal-Objekt über die AbortController.signal-Eigenschaft zu.

Wenn die fetch-Anfrage gestartet wird, übergeben wir das AbortSignal als Option innerhalb des Optionsobjekts der Anfrage (das {signal} unten). Dies verknüpft das Signal und den Controller mit der fetch-Anfrage und ermöglicht es uns, sie durch Aufrufen von AbortController.abort() abzubrechen, wie unten im zweiten Ereignis-Listener zu sehen ist.

Wenn abort() aufgerufen wird, lehnt das fetch()-Promise mit einem DOMException namens AbortError ab.

js
let controller;
const url = "video.mp4";

const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");

downloadBtn.addEventListener("click", fetchVideo);

abortBtn.addEventListener("click", () => {
  if (controller) {
    controller.abort();
    console.log("Download aborted");
  }
});

async function fetchVideo() {
  controller = new AbortController();
  const signal = controller.signal;

  try {
    const response = await fetch(url, { signal });
    console.log("Download complete", response);
    // process response further
  } catch (err) {
    console.error(`Download error: ${err.message}`);
  }
}

Wenn die Anfrage nach dem fetch()-Aufruf abgebrochen wird, aber bevor der Antwortkörper gelesen wurde, wird der Versuch, den Antwortkörper zu lesen, mit einer AbortError-Ausnahme abgelehnt.

js
async function get() {
  const controller = new AbortController();
  const request = new Request("https://example.org/get", {
    signal: controller.signal,
  });

  const response = await fetch(request);
  controller.abort();
  // The next line will throw `AbortError`
  const text = await response.text();
  console.log(text);
}

Ein voll funktionsfähiges Beispiel finden Sie auf GitHub; Sie können es auch live ansehen.

Spezifikationen

Specification
DOM
# interface-abortcontroller

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
AbortController
AbortController() constructor
abort
reason parameter
signal

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
Has more compatibility info.

Siehe auch