ReadableStream: getReader()-Methode

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

Die getReader()-Methode der ReadableStream-Schnittstelle erstellt einen Reader und sperrt den Stream dafür. Solange der Stream gesperrt ist, kann kein anderer Reader erworben werden, bis dieser freigegeben wird.

Syntax

js
getReader()
getReader(options)

Parameter

options Optional

Ein Objekt, das die folgenden Eigenschaften enthält:

mode Optional

Eine Eigenschaft, die den Typ des zu erstellenden Readers angibt. Mögliche Werte sind:

  • "byob", was zur Erstellung eines ReadableStreamBYOBReader führt, der lesbare Byte-Ströme lesen kann (Ströme, die die Null-Kopie-Übertragung von einer zugrunde liegenden Byte-Quelle zum Reader unterstützen, wenn interne Stream-Puffer leer sind).
  • undefined (oder gar nicht angegeben — das ist der Standard), was zur Erstellung eines ReadableStreamDefaultReader führt, der einzelne Brocken aus einem Stream lesen kann.

Rückgabewert

Ein Objektinstanz vom Typ ReadableStreamDefaultReader oder ReadableStreamBYOBReader, abhängig vom mode-Wert.

Ausnahmen

RangeError

Wird ausgelöst, wenn der bereitgestellte Moduswert nicht "byob" oder undefined ist.

TypeError

Wird ausgelöst, wenn der Stream, für den Sie einen Reader erstellen möchten, bereits gesperrt ist oder kein ReadableStream ist. Dies wird auch ausgelöst, wenn ein BYOB-Reader angefordert wird und der Stream-Controller kein ReadableByteStreamController ist (der Stream wurde nicht konstruiert als zugrunde liegende Quelle mit type="bytes").

Beispiele

Im folgenden einfachen Beispiel wird ein zuvor erstellter benutzerdefinierter ReadableStream mithilfe eines ReadableStreamDefaultReader gelesen, der mit getReader() erstellt wurde. (Siehe unser Einfaches Zufallsstrom-Beispiel für den vollständigen Code). Jeder Brocken wird nacheinander gelesen und in die Benutzeroberfläche ausgegeben, bis der Stream vollständig gelesen wurde, woraufhin wir aus der rekursiven Funktion austreten und den gesamten Stream in einem anderen Teil der Benutzeroberfläche ausgeben.

js
function fetchStream() {
  const reader = stream.getReader();
  let charsReceived = 0;

  // read() returns a promise that resolves
  // when a value has been received
  reader.read().then(function processText({ done, value }) {
    // Result objects contain two properties:
    // done  - true if the stream has already given you all its data.
    // value - some data. Always undefined when done is true.
    if (done) {
      console.log("Stream complete");
      para.textContent = value;
      return;
    }

    // value for fetch streams is a Uint8Array
    charsReceived += value.length;
    const chunk = value;
    let listItem = document.createElement("li");
    listItem.textContent = `Received ${charsReceived} characters so far. Current chunk = ${chunk}`;
    list2.appendChild(listItem);

    result += chunk;

    // Read some more, and call this function again
    return reader.read().then(processText);
  });
}

Spezifikationen

Specification
Streams Standard
# ref-for-rs-get-reader⑤

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch