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

View in English Always switch to English

ReadableStreamDefaultController: close()-Methode

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Januar 2020 browserübergreifend verfügbar.

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

Die close()-Methode des ReadableStreamDefaultController-Interfaces schließt den zugehörigen Stream.

Leser können weiterhin zuvor in den Stream eingereihte Datenblöcke lesen, aber sobald diese gelesen sind, wird der Stream geschlossen. Wenn Sie den Stream vollständig entfernen und alle eingereihten Datenblöcke verwerfen möchten, sollten Sie ReadableStream.cancel() oder ReadableStreamDefaultReader.cancel() verwenden.

Syntax

js
close()

Parameter

Keine.

Rückgabewert

Keiner (undefined).

Ausnahmen

TypeError

Wird ausgelöst, wenn close() aufgerufen wird, während der Stream nicht lesbar ist — weil er bereits geschlossen, abgebrochen oder fehlerhaft ist — oder weil er vom zugrunde liegenden Quellcode dazu aufgefordert wurde, aber dies noch nicht getan hat, da es noch eingereihte Blöcke zum Lesen gibt.

Beispiele

Im folgenden einfachen Beispiel wird ein benutzerdefinierter ReadableStream mittels eines Konstruktors erstellt (sehen Sie sich unser Beispiel für einen einfachen zufälligen Stream für den vollständigen Code an). Die start()-Funktion generiert alle Sekunde einen zufälligen Textstring und reiht ihn in den Stream ein. Eine cancel()-Funktion wird ebenfalls bereitgestellt, um die Generierung zu stoppen, falls ReadableStream.cancel() aus irgendeinem Grund aufgerufen wird.

Wenn eine Taste gedrückt wird, wird die Generierung gestoppt, der Stream durch close() geschlossen, und eine weitere Funktion wird ausgeführt, die die Daten wieder aus dem Stream liest.

js
let interval;
const stream = new ReadableStream({
  start(controller) {
    interval = setInterval(() => {
      let string = randomChars();

      // Add the string to the stream
      controller.enqueue(string);

      // show it on the screen
      let listItem = document.createElement("li");
      listItem.textContent = string;
      list1.appendChild(listItem);
    }, 1000);

    button.addEventListener("click", () => {
      clearInterval(interval);
      fetchStream();
      controller.close();
    });
  },
  pull(controller) {
    // We don't really need a pull in this example
  },
  cancel() {
    // This is called if the reader cancels,
    // so we should stop generating strings
    clearInterval(interval);
  },
});

Spezifikationen

Spezifikation
Streams
# ref-for-rs-default-controller-close①

Browser-Kompatibilität

Siehe auch