ReadableStream: ReadableStream() Konstruktor
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Der ReadableStream()
Konstruktor erstellt und gibt ein lesbares Stream-Objekt aus den angegebenen Handlern zurück.
Beachten Sie, dass zwar alle Parameter technisch optional sind, das Weglassen der underlyingSource
jedoch zu einem Stream führt, der keine Quelle hat und von dem nicht gelesen werden kann (Leser geben ein Versprechen zurück, das niemals erfüllt wird).
Syntax
new ReadableStream()
new ReadableStream(underlyingSource)
new ReadableStream(underlyingSource, queuingStrategy)
Parameter
underlyingSource
Optional-
Ein Objekt, das Methoden und Eigenschaften enthält, die definieren, wie sich die erstellte Stream-Instanz verhält.
underlyingSource
kann Folgendes enthalten:start
(controller) Optional-
Dies ist eine Methode, die sofort beim Erstellen des Objekts aufgerufen wird. Der Inhalt dieser Methode wird vom Entwickler definiert und sollte darauf abzielen, Zugriff auf die Stream-Quelle zu erhalten und alles andere zu tun, was erforderlich ist, um die Stream-Funktionalität einzurichten. Wenn dieser Vorgang asynchron erfolgen soll, kann er ein Versprechen zurückgeben, um den Erfolg oder das Scheitern anzuzeigen. Der
controller
-Parameter, der an diese Methode übergeben wird, ist einReadableStreamDefaultController
oder einReadableByteStreamController
, abhängig vom Wert dertype
-Eigenschaft. Dies kann vom Entwickler verwendet werden, um den Stream während der Einrichtung zu kontrollieren. pull
(controller) Optional-
Diese Methode, ebenfalls vom Entwickler definiert, wird wiederholt aufgerufen, wenn die interne Warteschlange des Streams nicht voll ist, bis sie ihre Schwelle erreicht. Wenn
pull()
ein Versprechen zurückgibt, wird es nicht erneut aufgerufen, bis dieses Versprechen erfüllt ist; wenn das Versprechen abgelehnt wird, wird der Stream fehlerhaft. Dercontroller
-Parameter, der an diese Methode übergeben wird, ist einReadableStreamDefaultController
oder einReadableByteStreamController
, abhängig vom Wert dertype
-Eigenschaft. Dies kann vom Entwickler verwendet werden, um den Stream zu kontrollieren, wenn weitere Chunks abgerufen werden. Diese Funktion wird nicht aufgerufen, bisstart()
erfolgreich abgeschlossen ist. Außerdem wird sie nur wiederholt aufgerufen, wenn sie mindestens einen Chunk in die Warteschlange stellt oder eine BYOB-Anforderung erfüllt; einepull()
-Implementierung ohne Operationen wird nicht kontinuierlich aufgerufen. cancel
(reason) Optional-
Diese Methode, ebenfalls vom Entwickler definiert, wird aufgerufen, wenn die App signalisiert, dass der Stream abgebrochen werden soll (z. B. wenn
ReadableStream.cancel()
aufgerufen wird). Der Inhalt sollte alles Notwendige tun, um den Zugriff auf die Stream-Quelle freizugeben. Wenn dieser Vorgang asynchron ist, kann er ein Versprechen zurückgeben, um Erfolg oder Misserfolg anzuzeigen. Der Parameterreason
enthält eine Zeichenfolge, die beschreibt, warum der Stream abgebrochen wurde. type
Optional-
Diese Eigenschaft steuert, um welchen Typ es sich bei dem lesbaren Stream handelt. Wenn es mit einem auf
"bytes"
gesetzten Wert enthalten ist, wird das übergebene Controller-Objekt einReadableByteStreamController
sein, das in der Lage ist, einen BYOB (bring your own buffer)/Byte-Stream zu verarbeiten. Wenn es nicht enthalten ist, wird der übergebene Controller einReadableStreamDefaultController
sein. autoAllocateChunkSize
Optional-
Für Byte-Streams kann der Entwickler die
autoAllocateChunkSize
mit einem positiven ganzzahligen Wert festlegen, um die Automatikzuteilungsfunktion des Streams einzuschalten. Wenn dies festgelegt ist, weist die Stream-Implementierung automatisch einen Ansichtsbuffer der angegebenen Größe inReadableByteStreamController.byobRequest
zu, wenn erforderlich.Dies muss aktiviert werden, um Zero-Copy-Transfers mit einem Standard-
ReadableStreamDefaultReader
verwenden zu können. Wenn es nicht festgelegt ist, streamt ein Standardleser dennoch Daten, aberReadableByteStreamController.byobRequest
wird immernull
sein und Übertragungen an den Verbraucher müssen über die internen Warteschlangen des Streams erfolgen.
queuingStrategy
Optional-
Ein Objekt, das optional eine Warteschlangenstrategie für den Stream definiert. Dies nimmt zwei Parameter an:
highWaterMark
-
Eine nicht-negative ganze Zahl — dies definiert die Gesamtanzahl von Chunks, die in der internen Warteschlange enthalten sein können, bevor Gegendruck angewendet wird.
size(chunk)
-
Eine Methode, die einen Parameter
chunk
enthält — dies gibt die Größe an, die für jeden Chunk in Bytes verwendet werden soll.
Hinweis: Sie könnten Ihre eigene benutzerdefinierte
queuingStrategy
definieren oder eine Instanz vonByteLengthQueuingStrategy
oderCountQueuingStrategy
für diesen Objektwert verwenden. Wenn keinequeuingStrategy
vorgegeben ist, ist die verwendete Standardstrategie dieselbe wie bei einerCountQueuingStrategy
mit einer hohen Schwelle von
Rückgabewert
Eine Instanz des ReadableStream
-Objekts.
Ausnahmen
RangeError
-
Wird ausgelöst, wenn der bereitgestellte Typwert weder
"bytes"
nochundefined
ist.
Beispiele
Im folgenden einfachen Beispiel wird ein benutzerdefinierter ReadableStream
mithilfe eines
Konstruktors erstellt (siehe unser Einfaches Zufallsstrom-Beispiel für den vollständigen Code). Die Funktion start()
generiert jede Sekunde eine
zufällige Textzeichenfolge und fügt sie in den Stream ein. Eine
cancel()
-Funktion wird ebenfalls bereitgestellt, um die Generierung zu stoppen, wenn
ReadableStream.cancel()
aus irgendeinem Grund aufgerufen wird.
Wenn eine Schaltfläche gedrückt wird, wird die Generierung gestoppt, der Stream wird durch
ReadableStreamDefaultController.close()
geschlossen, und eine andere Funktion wird ausgeführt,
die die Daten aus dem Stream zurückliest.
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
Specification |
---|
Streams Standard # ref-for-rs-constructor⑤ |
Browser-Kompatibilität
BCD tables only load in the browser