ReadableStream: getReader()-Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2019.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die getReader()
-Methode der ReadableStream
-Schnittstelle erstellt einen Reader und sperrt den Stream für diesen. Solange der Stream gesperrt ist, kann kein anderer Reader erworben werden, bis dieser freigegeben wird.
Syntax
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 die Erstellung einesReadableStreamBYOBReader
zur Folge hat, der lesbare Byte-Streams lesen kann (Streams, die eine Zero-Copy-Übertragung von einer zugrunde liegenden Byte-Quelle zum Reader unterstützen, wenn interne Stream-Puffer leer sind).undefined
(oder gar nicht angegeben — dies ist der Standardwert), was die Erstellung einesReadableStreamDefaultReader
zur Folge hat, der einzelne Chunks aus einem Stream lesen kann.
Rückgabewert
Eine Instanz eines ReadableStreamDefaultReader
oder ReadableStreamBYOBReader
-Objekts, abhängig vom Wert des mode
.
Ausnahmen
RangeError
-
Wird geworfen, wenn der angegebene
mode
-Wert nicht"byob"
oderundefined
ist. TypeError
-
Wird geworfen, wenn der Stream, für den Sie versuchen, einen Reader zu erstellen, bereits gesperrt ist oder nicht ein
ReadableStream
ist. Dies wird auch geworfen, wenn ein BYOB-Reader angefordert wird und der Stream-Controller keinReadableByteStreamController
ist (der Stream wurde nicht als zugrunde liegende Quelle mittype="bytes"
konstruiert).
Beispiele
Im folgenden einfachen Beispiel wird ein zuvor erstellter benutzerdefinierter ReadableStream
mit einem mit getReader()
erstellten ReadableStreamDefaultReader
gelesen. (siehe unser Beispiel für einen einfachen zufälligen Stream für den vollständigen Code). Jeder Chunk wird nacheinander gelesen und in die Benutzeroberfläche ausgegeben, bis der Stream vollständig gelesen wurde. Zu diesem Zeitpunkt verlassen wir die rekursive Funktion und geben den gesamten Stream an einem anderen Teil der Benutzeroberfläche aus.
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 # ref-for-rs-get-reader⑤ |