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
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 einesReadableStreamBYOBReader
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 einesReadableStreamDefaultReader
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"
oderundefined
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 keinReadableByteStreamController
ist (der Stream wurde nicht konstruiert als zugrunde liegende Quelle mittype="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.
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