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 Januar 2019.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die getReader()-Methode des ReadableStream-Interfaces erstellt einen Reader und sperrt den Stream dafür.
Während der Stream gesperrt ist, kann kein anderer Reader erworben werden, bis dieser freigegeben wird.
Syntax
getReader()
getReader(options)
Parameter
optionsOptional-
Ein Objekt, das die folgenden Eigenschaften enthält:
modeOptional-
Eine Eigenschaft, die den Typ des zu erstellenden Readers angibt. Die Werte können sein:
"byob", wodurch einReadableStreamBYOBReadererstellt wird, der lesbare Byte-Streams lesen kann (Streams, die beim Leeren der internen Stream-Puffer einen Zero-Copy-Transfer von einer zugrunde liegenden Byte-Quelle zum Reader unterstützen).undefined(oder gar nicht angegeben — dies ist der Standard), wodurch einReadableStreamDefaultReadererstellt wird, der einzelne Chunks aus einem Stream lesen kann.
Rückgabewert
Ein ReadableStreamDefaultReader- oder ReadableStreamBYOBReader-Objektinstanz, abhängig vom Wert von mode.
Ausnahmen
RangeError-
Wird ausgelöst, wenn der angegebene Moduswert nicht
"byob"oderundefinedist. TypeError-
Wird ausgelöst, wenn der Stream, für den Sie einen Reader erstellen möchten, bereits gesperrt oder kein
ReadableStreamist. Dies wird auch ausgelöst, wenn ein BYOB-Reader angefordert wird und der Stream-Controller keinReadableByteStreamControllerist (der Stream wurde nicht als zugrunde liegende Quelle mittype="bytes"konstruiert).
Beispiele
Im folgenden einfachen Beispiel wird ein zuvor erstellter benutzerdefinierter ReadableStream mit einem ReadableStreamDefaultReader gelesen, der mit getReader() erstellt wurde.
(Siehe unser Beispiel für einen einfachen Zufallsstream für den vollständigen Code).
Jeder Chunk wird nacheinander gelesen und in die Benutzeroberfläche ausgegeben, bis der Stream vollständig gelesen wurde. An diesem Punkt beenden wir die Rekursivfunktion 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⑤> |
Browser-Kompatibilität
Loading…