Web Streams API
[Verlauf]
| Version | Änderungen |
|---|---|
| v21.0.0 | Nicht mehr experimentell. |
| v18.0.0 | Die Verwendung dieser API gibt keine Laufzeitwarnung mehr aus. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
[Stabil: 2 - Stabil]
Stabil: 2 Stabilität: 2 - Stabil
Eine Implementierung des WHATWG Streams Standard.
Übersicht
Der WHATWG Streams Standard (oder "Web Streams") definiert eine API für die Verarbeitung von Streaming-Daten. Sie ähnelt der Node.js Streams API, ist aber später entstanden und hat sich zur "Standard"-API für das Streamen von Daten in vielen JavaScript-Umgebungen entwickelt.
Es gibt drei Haupttypen von Objekten:
ReadableStream- Stellt eine Quelle für Streaming-Daten dar.WritableStream- Stellt ein Ziel für Streaming-Daten dar.TransformStream- Stellt einen Algorithmus zur Transformation von Streaming-Daten dar.
Beispiel ReadableStream
Dieses Beispiel erstellt einen einfachen ReadableStream, der den aktuellen performance.now()-Zeitstempel einmal pro Sekunde für immer ausgibt. Ein asynchrones Iterable wird verwendet, um die Daten aus dem Stream zu lesen.
import {
ReadableStream,
} from 'node:stream/web';
import {
setInterval as every,
} from 'node:timers/promises';
import {
performance,
} from 'node:perf_hooks';
const SECOND = 1000;
const stream = new ReadableStream({
async start(controller) {
for await (const _ of every(SECOND))
controller.enqueue(performance.now());
},
});
for await (const value of stream)
console.log(value);const {
ReadableStream,
} = require('node:stream/web');
const {
setInterval: every,
} = require('node:timers/promises');
const {
performance,
} = require('node:perf_hooks');
const SECOND = 1000;
const stream = new ReadableStream({
async start(controller) {
for await (const _ of every(SECOND))
controller.enqueue(performance.now());
},
});
(async () => {
for await (const value of stream)
console.log(value);
})();API
Klasse: ReadableStream
[Historie]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
new ReadableStream([underlyingSource [, strategy]])
Hinzugefügt in: v16.5.0
underlyingSource<Object>start<Function> Eine benutzerdefinierte Funktion, die unmittelbar beim Erstellen desReadableStreamaufgerufen wird.controller<ReadableStreamDefaultController> | <ReadableByteStreamController>Gibt zurück:
undefinedoder ein Promise, das mitundefinederfüllt wird.pull<Function> Eine benutzerdefinierte Funktion, die wiederholt aufgerufen wird, wenn die interne Warteschlange desReadableStreamnicht voll ist. Die Operation kann synchron oder asynchron sein. Wenn asynchron, wird die Funktion erst wieder aufgerufen, wenn das zuvor zurückgegebene Promise erfüllt ist.controller<ReadableStreamDefaultController> | <ReadableByteStreamController>Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.cancel<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn derReadableStreamabgebrochen wird.reason<any>Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.type<string> Muss'bytes'oderundefinedsein.autoAllocateChunkSize<number> Wird nur verwendet, wenntypegleich'bytes'ist. Wenn auf einen Wert ungleich Null gesetzt, wird automatisch ein View-Buffer fürReadableByteStreamController.byobRequestzugewiesen. Wenn nicht festgelegt, muss man die internen Warteschlangen des Streams verwenden, um Daten über den StandardleserReadableStreamDefaultReaderzu übertragen.
strategy<Object>highWaterMark<number> Die maximale interne Warteschlangengröße, bevor Gegendruck ausgeübt wird.size<Function> Eine benutzerdefinierte Funktion, die verwendet wird, um die Größe jedes Datenchunks zu identifizieren.chunk<any>- Gibt zurück: <number>
readableStream.locked
Hinzugefügt in: v16.5.0
- Typ: <boolean> Ist auf
truegesetzt, wenn es einen aktiven Leser für diesen <ReadableStream> gibt.
Die Eigenschaft readableStream.locked ist standardmäßig false und wird auf true gesetzt, solange ein aktiver Leser die Daten des Streams konsumiert.
readableStream.cancel([reason])
Hinzugefügt in: v16.5.0
reason<any>- Rückgabe: Ein Promise, das mit
undefinederfüllt wird, sobald die Abbruch abgeschlossen ist.
readableStream.getReader([options])
Hinzugefügt in: v16.5.0
options<Object>mode<string>'byob'oderundefined
Rückgabe: <ReadableStreamDefaultReader> | <ReadableStreamBYOBReader>
import { ReadableStream } from 'node:stream/web';
const stream = new ReadableStream();
const reader = stream.getReader();
console.log(await reader.read());const { ReadableStream } = require('node:stream/web');
const stream = new ReadableStream();
const reader = stream.getReader();
reader.read().then(console.log);Führt dazu, dass readableStream.locked auf true gesetzt wird.
readableStream.pipeThrough(transform[, options])
Hinzugefügt in: v16.5.0
transform<Object>readable<ReadableStream> DerReadableStream, an dentransform.writabledie potenziell modifizierten Daten pusht, die er von diesemReadableStreamempfängt.writable<WritableStream> DerWritableStream, in den die Daten diesesReadableStreamgeschrieben werden.
options<Object>preventAbort<boolean> Wenntrue, führen Fehler in diesemReadableStreamnicht dazu, dasstransform.writableabgebrochen wird.preventCancel<boolean> Wenntrue, führen Fehler im Zieltransform.writablenicht dazu, dass dieserReadableStreamabgebrochen wird.preventClose<boolean> Wenntrue, führt das Schließen diesesReadableStreamnicht dazu, dasstransform.writablegeschlossen wird.signal<AbortSignal> Ermöglicht das Abbrechen der Datenübertragung mithilfe eines <AbortController>.
Rückgabe: <ReadableStream> Von
transform.readable.
Verbindet diesen <ReadableStream> mit dem Paar <ReadableStream> und <WritableStream>, das im Argument transform bereitgestellt wird, so dass die Daten aus diesem <ReadableStream> in transform.writable geschrieben, möglicherweise transformiert und dann an transform.readable weitergeleitet werden. Sobald die Pipeline konfiguriert ist, wird transform.readable zurückgegeben.
Führt dazu, dass readableStream.locked auf true gesetzt wird, solange der Pipe-Vorgang aktiv ist.
import {
ReadableStream,
TransformStream,
} from 'node:stream/web';
const stream = new ReadableStream({
start(controller) {
controller.enqueue('a');
},
});
const transform = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
},
});
const transformedStream = stream.pipeThrough(transform);
for await (const chunk of transformedStream)
console.log(chunk);
// Prints: Aconst {
ReadableStream,
TransformStream,
} = require('node:stream/web');
const stream = new ReadableStream({
start(controller) {
controller.enqueue('a');
},
});
const transform = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
},
});
const transformedStream = stream.pipeThrough(transform);
(async () => {
for await (const chunk of transformedStream)
console.log(chunk);
// Prints: A
})();readableStream.pipeTo(destination[, options])
Hinzugefügt in: v16.5.0
destination<WritableStream> Ein <WritableStream>, in den die Daten diesesReadableStreamgeschrieben werden.options<Object>preventAbort<boolean> Wenntrue, führen Fehler in diesemReadableStreamnicht dazu, dassdestinationabgebrochen wird.preventCancel<boolean> Wenntrue, führen Fehler imdestinationnicht dazu, dass dieserReadableStreamabgebrochen wird.preventClose<boolean> Wenntrue, führt das Schließen diesesReadableStreamnicht dazu, dassdestinationgeschlossen wird.signal<AbortSignal> Ermöglicht das Abbrechen der Datenübertragung mithilfe eines <AbortController>.
Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Führt dazu, dass readableStream.locked auf true gesetzt wird, während der Pipe-Vorgang aktiv ist.
readableStream.tee()
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.10.0, v16.18.0 | Unterstützung für das Verzweigen eines lesbaren Byte-Streams. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
- Gibt zurück: <ReadableStream[]>
Gibt ein Paar neuer <ReadableStream>-Instanzen zurück, an die die Daten dieses ReadableStream weitergeleitet werden. Jeder erhält die gleichen Daten.
Führt dazu, dass readableStream.locked auf true gesetzt wird.
readableStream.values([options])
Hinzugefügt in: v16.5.0
options<Object>preventCancel<boolean> Wenntrue, verhindert das Schließen des <ReadableStream>, wenn der asynchrone Iterator abrupt beendet wird. Standard:false.
Erstellt und gibt einen asynchronen Iterator zurück, der zum Konsumieren der Daten dieses ReadableStream verwendet werden kann.
Führt dazu, dass readableStream.locked auf true gesetzt wird, während der asynchrone Iterator aktiv ist.
import { Buffer } from 'node:buffer';
const stream = new ReadableStream(getSomeSource());
for await (const chunk of stream.values({ preventCancel: true }))
console.log(Buffer.from(chunk).toString());Asynchrone Iteration
Das <ReadableStream>-Objekt unterstützt das asynchrone Iteratorprotokoll mithilfe der for await-Syntax.
import { Buffer } from 'node:buffer';
const stream = new ReadableStream(getSomeSource());
for await (const chunk of stream)
console.log(Buffer.from(chunk).toString());Der asynchrone Iterator wird den <ReadableStream> konsumieren, bis er terminiert.
Standardmäßig wird der <ReadableStream> geschlossen, wenn der asynchrone Iterator frühzeitig beendet wird (entweder durch ein break, return oder ein throw). Um das automatische Schließen des <ReadableStream> zu verhindern, verwende die Methode readableStream.values(), um den asynchronen Iterator zu erhalten und die Option preventCancel auf true zu setzen.
Der <ReadableStream> darf nicht gesperrt sein (d. h. er darf keinen vorhandenen aktiven Leser haben). Während der asynchronen Iteration wird der <ReadableStream> gesperrt.
Übertragung mit postMessage()
Eine <ReadableStream>-Instanz kann mithilfe eines <MessagePort> übertragen werden.
const stream = new ReadableStream(getReadableSourceSomehow());
const { port1, port2 } = new MessageChannel();
port1.onmessage = ({ data }) => {
data.getReader().read().then((chunk) => {
console.log(chunk);
});
};
port2.postMessage(stream, [stream]);ReadableStream.from(iterable)
Hinzugefügt in: v20.6.0
iterable<Iterable> Objekt, das das Iterable-ProtokollSymbol.asyncIteratoroderSymbol.iteratorimplementiert.
Eine Hilfsmethode, die einen neuen <ReadableStream> aus einem Iterable erstellt.
import { ReadableStream } from 'node:stream/web';
async function* asyncIterableGenerator() {
yield 'a';
yield 'b';
yield 'c';
}
const stream = ReadableStream.from(asyncIterableGenerator());
for await (const chunk of stream)
console.log(chunk); // Prints: 'a', 'b', 'c'const { ReadableStream } = require('node:stream/web');
async function* asyncIterableGenerator() {
yield 'a';
yield 'b';
yield 'c';
}
(async () => {
const stream = ReadableStream.from(asyncIterableGenerator());
for await (const chunk of stream)
console.log(chunk); // Prints: 'a', 'b', 'c'
})();Klasse: ReadableStreamDefaultReader
[Historie]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Standardmäßig gibt der Aufruf von readableStream.getReader() ohne Argumente eine Instanz von ReadableStreamDefaultReader zurück. Der Standard-Reader behandelt die Datenchunks, die durch den Stream geleitet werden, als opake Werte, wodurch der <ReadableStream> im Allgemeinen mit jedem JavaScript-Wert arbeiten kann.
new ReadableStreamDefaultReader(stream)
Hinzugefügt in: v16.5.0
stream<ReadableStream>
Erstellt einen neuen <ReadableStreamDefaultReader>, der an den angegebenen <ReadableStream> gebunden ist.
readableStreamDefaultReader.cancel([reason])
Hinzugefügt in: v16.5.0
reason<any>- Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Bricht den <ReadableStream> ab und gibt ein Promise zurück, das erfüllt wird, wenn der zugrunde liegende Stream abgebrochen wurde.
readableStreamDefaultReader.closed
Hinzugefügt in: v16.5.0
- Typ: <Promise> Erfüllt mit
undefined, wenn der zugehörige <ReadableStream> geschlossen wird, oder abgelehnt, wenn der Stream Fehler verursacht oder die Sperre des Readers freigegeben wird, bevor der Stream mit dem Schließen fertig ist.
readableStreamDefaultReader.read()
Hinzugefügt in: v16.5.0
Fordert den nächsten Datenchunk vom zugrunde liegenden <ReadableStream> an und gibt ein Promise zurück, das mit den Daten erfüllt wird, sobald diese verfügbar sind.
readableStreamDefaultReader.releaseLock()
Hinzugefügt in: v16.5.0
Gibt die Sperre dieses Readers für den zugrunde liegenden <ReadableStream> frei.
Klasse: ReadableStreamBYOBReader
[Historie]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Der ReadableStreamBYOBReader ist ein alternativer Konsument für byte-orientierte <ReadableStream>s (solche, die mit underlyingSource.type gleich 'bytes' erstellt wurden, als der ReadableStream erstellt wurde).
Das BYOB steht kurz für "bring your own buffer" (bringe deinen eigenen Puffer mit). Dies ist ein Muster, das ein effizienteres Lesen von byte-orientierten Daten ermöglicht, das unnötiges Kopieren vermeidet.
import {
open,
} from 'node:fs/promises';
import {
ReadableStream,
} from 'node:stream/web';
import { Buffer } from 'node:buffer';
class Source {
type = 'bytes';
autoAllocateChunkSize = 1024;
async start(controller) {
this.file = await open(new URL(import.meta.url));
this.controller = controller;
}
async pull(controller) {
const view = controller.byobRequest?.view;
const {
bytesRead,
} = await this.file.read({
buffer: view,
offset: view.byteOffset,
length: view.byteLength,
});
if (bytesRead === 0) {
await this.file.close();
this.controller.close();
}
controller.byobRequest.respond(bytesRead);
}
}
const stream = new ReadableStream(new Source());
async function read(stream) {
const reader = stream.getReader({ mode: 'byob' });
const chunks = [];
let result;
do {
result = await reader.read(Buffer.alloc(100));
if (result.value !== undefined)
chunks.push(Buffer.from(result.value));
} while (!result.done);
return Buffer.concat(chunks);
}
const data = await read(stream);
console.log(Buffer.from(data).toString());new ReadableStreamBYOBReader(stream)
Hinzugefügt in: v16.5.0
stream<ReadableStream>
Erstellt einen neuen ReadableStreamBYOBReader, der an den gegebenen <ReadableStream> gebunden ist.
readableStreamBYOBReader.cancel([reason])
Hinzugefügt in: v16.5.0
reason<any>- Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Bricht den <ReadableStream> ab und gibt ein Promise zurück, das erfüllt wird, wenn der zugrunde liegende Stream abgebrochen wurde.
readableStreamBYOBReader.closed
Hinzugefügt in: v16.5.0
- Typ: <Promise> Wird mit
undefinederfüllt, wenn der zugehörige <ReadableStream> geschlossen wird, oder abgelehnt, wenn der Stream Fehler aufweist oder die Sperre des Readers freigegeben wird, bevor der Stream den Schließvorgang abgeschlossen hat.
readableStreamBYOBReader.read(view[, options])
[Verlauf]
| Version | Änderungen |
|---|---|
| v21.7.0, v20.17.0 | Option min hinzugefügt. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
view<Buffer> | <TypedArray> | <DataView>options<Object>min<number> Wenn gesetzt, wird das zurückgegebene Promise erst erfüllt, sobaldminAnzahl von Elementen verfügbar sind. Wenn nicht gesetzt, wird das Promise erfüllt, wenn mindestens ein Element verfügbar ist.
Gibt zurück: Ein Promise, das mit einem Objekt erfüllt wird:
value<TypedArray> | <DataView>done<boolean>
Fordert den nächsten Datenblock vom zugrunde liegenden <ReadableStream> an und gibt ein Promise zurück, das mit den Daten erfüllt wird, sobald diese verfügbar sind.
Übergeben Sie keine gepoolte <Buffer>-Objektinstanz an diese Methode. Gepoolte Buffer-Objekte werden mit Buffer.allocUnsafe() oder Buffer.from() erstellt oder oft von verschiedenen node:fs-Modul-Callbacks zurückgegeben. Diese Arten von Buffern verwenden ein gemeinsam genutztes zugrunde liegendes <ArrayBuffer>-Objekt, das alle Daten aus allen gepoolten Buffer-Instanzen enthält. Wenn ein Buffer, <TypedArray> oder <DataView> an readableStreamBYOBReader.read() übergeben wird, wird das zugrunde liegende ArrayBuffer der Ansicht getrennt, wodurch alle vorhandenen Ansichten, die möglicherweise in diesem ArrayBuffer vorhanden sind, ungültig werden. Dies kann katastrophale Folgen für Ihre Anwendung haben.
readableStreamBYOBReader.releaseLock()
Hinzugefügt in: v16.5.0
Gibt die Sperre dieses Readers für den zugrunde liegenden <ReadableStream> frei.
Klasse: ReadableStreamDefaultController
Hinzugefügt in: v16.5.0
Jeder <ReadableStream> verfügt über einen Controller, der für den internen Zustand und die Verwaltung der Stream-Warteschlange verantwortlich ist. Der ReadableStreamDefaultController ist die Standard-Controller-Implementierung für ReadableStreams, die nicht byte-orientiert sind.
readableStreamDefaultController.close()
Hinzugefügt in: v16.5.0
Schließt den <ReadableStream>, dem dieser Controller zugeordnet ist.
readableStreamDefaultController.desiredSize
Hinzugefügt in: v16.5.0
- Typ: <number>
Gibt die Datenmenge zurück, die zum Füllen der Warteschlange des <ReadableStream> verbleibt.
readableStreamDefaultController.enqueue([chunk])
Hinzugefügt in: v16.5.0
chunk<any>
Fügt der Warteschlange des <ReadableStream> einen neuen Datenblock hinzu.
readableStreamDefaultController.error([error])
Hinzugefügt in: v16.5.0
error<any>
Signalisiert einen Fehler, der dazu führt, dass der <ReadableStream> einen Fehler ausgibt und geschlossen wird.
Klasse: ReadableByteStreamController
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.10.0 | Unterstützung für die Handhabung einer BYOB-Pull-Anfrage von einem freigegebenen Reader. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Jeder <ReadableStream> verfügt über einen Controller, der für den internen Zustand und die Verwaltung der Stream-Warteschlange verantwortlich ist. Der ReadableByteStreamController ist für byte-orientierte ReadableStreams.
readableByteStreamController.byobRequest
Hinzugefügt in: v16.5.0
readableByteStreamController.close()
Hinzugefügt in: v16.5.0
Schließt den <ReadableStream>, dem dieser Controller zugeordnet ist.
readableByteStreamController.desiredSize
Hinzugefügt in: v16.5.0
- Typ: <number>
Gibt die Datenmenge zurück, die noch benötigt wird, um die Warteschlange des <ReadableStream> zu füllen.
readableByteStreamController.enqueue(chunk)
Hinzugefügt in: v16.5.0
chunk: <Buffer> | <TypedArray> | <DataView>
Fügt einen neuen Datenblock an die Warteschlange des <ReadableStream> an.
readableByteStreamController.error([error])
Hinzugefügt in: v16.5.0
error<any>
Signalisiert einen Fehler, der dazu führt, dass der <ReadableStream> einen Fehler ausgibt und sich schließt.
Klasse: ReadableStreamBYOBRequest
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse wird nun im globalen Objekt bereitgestellt. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Bei Verwendung von ReadableByteStreamController in byteorientierten Streams und bei Verwendung von ReadableStreamBYOBReader bietet die Eigenschaft readableByteStreamController.byobRequest Zugriff auf eine ReadableStreamBYOBRequest-Instanz, die die aktuelle Leseanforderung darstellt. Das Objekt wird verwendet, um Zugriff auf den ArrayBuffer/TypedArray zu erhalten, der für die Leseanforderung zum Füllen bereitgestellt wurde, und bietet Methoden, um zu signalisieren, dass die Daten bereitgestellt wurden.
readableStreamBYOBRequest.respond(bytesWritten)
Hinzugefügt in: v16.5.0
bytesWritten<number>
Signalisiert, dass eine Anzahl von bytesWritten Bytes in readableStreamBYOBRequest.view geschrieben wurde.
readableStreamBYOBRequest.respondWithNewView(view)
Hinzugefügt in: v16.5.0
view<Buffer> | <TypedArray> | <DataView>
Signalisiert, dass die Anfrage mit in ein neues Buffer, TypedArray oder DataView geschriebenen Bytes erfüllt wurde.
readableStreamBYOBRequest.view
Hinzugefügt in: v16.5.0
- Typ: <Buffer> | <TypedArray> | <DataView>
Klasse: WritableStream
[Historie]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Der WritableStream ist ein Ziel, an das Stream-Daten gesendet werden.
import {
WritableStream,
} from 'node:stream/web';
const stream = new WritableStream({
write(chunk) {
console.log(chunk);
},
});
await stream.getWriter().write('Hello World');new WritableStream([underlyingSink[, strategy]])
Hinzugefügt in: v16.5.0
underlyingSink<Object>start<Function> Eine benutzerdefinierte Funktion, die sofort aufgerufen wird, wenn derWritableStreamerstellt wird.controller<WritableStreamDefaultController>Gibt zurück:
undefinedoder ein Promise, das mitundefinederfüllt wird.write<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn ein Datenchunk in denWritableStreamgeschrieben wurde.chunk<any>controller<WritableStreamDefaultController>Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.close<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn derWritableStreamgeschlossen wird.Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.abort<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, um denWritableStreamabrupt zu schließen.reason<any>Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.type<any> Die Optiontypeist für die zukünftige Verwendung reserviert und muss undefiniert sein.
strategy<Object>highWaterMark<number> Die maximale interne Warteschlangengröße, bevor Gegendruck angewendet wird.size<Function> Eine benutzerdefinierte Funktion, die verwendet wird, um die Größe jedes Datenchunks zu identifizieren.chunk<any>- Gibt zurück: <number>
writableStream.abort([reason])
Hinzugefügt in: v16.5.0
reason<any>- Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Bricht den WritableStream abrupt ab. Alle in der Warteschlange befindlichen Schreibvorgänge werden abgebrochen und die zugehörigen Promises werden abgelehnt.
writableStream.close()
Hinzugefügt in: v16.5.0
- Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Schließt den WritableStream, wenn keine zusätzlichen Schreibvorgänge erwartet werden.
writableStream.getWriter()
Hinzugefügt in: v16.5.0
- Gibt zurück: <WritableStreamDefaultWriter>
Erstellt und gibt eine neue Writer-Instanz zurück, die zum Schreiben von Daten in den WritableStream verwendet werden kann.
writableStream.locked
Hinzugefügt in: v16.5.0
- Typ: <boolean>
Die Eigenschaft writableStream.locked ist standardmäßig false und wird auf true gesetzt, solange ein aktiver Writer an diesen WritableStream angehängt ist.
Übertragen mit postMessage()
Eine <WritableStream>-Instanz kann mit einem <MessagePort> übertragen werden.
const stream = new WritableStream(getWritableSinkSomehow());
const { port1, port2 } = new MessageChannel();
port1.onmessage = ({ data }) => {
data.getWriter().write('hello');
};
port2.postMessage(stream, [stream]);Klasse: WritableStreamDefaultWriter
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
new WritableStreamDefaultWriter(stream)
Hinzugefügt in: v16.5.0
stream<WritableStream>
Erstellt einen neuen WritableStreamDefaultWriter, der an den angegebenen WritableStream gebunden ist.
writableStreamDefaultWriter.abort([reason])
Hinzugefügt in: v16.5.0
reason<any>- Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Bricht den WritableStream abrupt ab. Alle in der Warteschlange befindlichen Schreibvorgänge werden abgebrochen und die zugehörigen Promises werden abgelehnt.
writableStreamDefaultWriter.close()
Hinzugefügt in: v16.5.0
- Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Schließt den WritableStream, wenn keine weiteren Schreibvorgänge erwartet werden.
writableStreamDefaultWriter.closed
Hinzugefügt in: v16.5.0
- Typ: <Promise> Erfüllt mit
undefined, wenn der zugehörige <WritableStream> geschlossen wird oder abgelehnt, wenn der Stream Fehler aufweist oder die Sperre des Writers freigegeben wird, bevor der Stream den Schließvorgang beendet.
writableStreamDefaultWriter.desiredSize
Hinzugefügt in: v16.5.0
- Typ: <number>
Die Datenmenge, die zum Füllen der Warteschlange des <WritableStream> benötigt wird.
writableStreamDefaultWriter.ready
Hinzugefügt in: v16.5.0
- Typ: <Promise> Erfüllt mit
undefined, wenn der Writer einsatzbereit ist.
writableStreamDefaultWriter.releaseLock()
Hinzugefügt in: v16.5.0
Gibt die Sperre dieses Writers für den zugrunde liegenden <ReadableStream> frei.
writableStreamDefaultWriter.write([chunk])
Hinzugefügt in: v16.5.0
chunk: <any>- Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.
Fügt einen neuen Datenblock an die Warteschlange des <WritableStream> an.
Klasse: WritableStreamDefaultController
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Der WritableStreamDefaultController verwaltet den internen Zustand des <WritableStream>.
writableStreamDefaultController.error([error])
Hinzugefügt in: v16.5.0
error<any>
Wird vom Benutzercode aufgerufen, um zu signalisieren, dass bei der Verarbeitung der WritableStream-Daten ein Fehler aufgetreten ist. Wenn diese Funktion aufgerufen wird, wird der <WritableStream> abgebrochen, wobei aktuell ausstehende Schreibvorgänge abgebrochen werden.
writableStreamDefaultController.signal
- Typ: <AbortSignal> Ein
AbortSignal, der verwendet werden kann, um ausstehende Schreib- oder Schließoperationen abzubrechen, wenn ein <WritableStream> abgebrochen wird.
Klasse: TransformStream
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Ein TransformStream besteht aus einem <ReadableStream> und einem <WritableStream>, die so verbunden sind, dass die in den WritableStream geschriebenen Daten empfangen und möglicherweise transformiert werden, bevor sie in die Warteschlange des ReadableStream geschoben werden.
import {
TransformStream,
} from 'node:stream/web';
const transform = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
},
});
await Promise.all([
transform.writable.getWriter().write('A'),
transform.readable.getReader().read(),
]);new TransformStream([transformer[, writableStrategy[, readableStrategy]]])
Hinzugefügt in: v16.5.0
transformer<Object>start<Function> Eine benutzerdefinierte Funktion, die unmittelbar aufgerufen wird, wenn derTransformStreamerstellt wird.controller<TransformStreamDefaultController>Gibt zurück:
undefinedoder ein Promise, das mitundefinederfüllt wird.transform<Function> Eine benutzerdefinierte Funktion, die einen Datenchunk empfängt und möglicherweise modifiziert, der intransformStream.writablegeschrieben wurde, bevor er antransformStream.readableweitergeleitet wird.chunk<any>controller<TransformStreamDefaultController>Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.flush<Function> Eine benutzerdefinierte Funktion, die unmittelbar vor dem Schließen der beschreibbaren Seite desTransformStreamaufgerufen wird und das Ende des Transformationsprozesses signalisiert.controller<TransformStreamDefaultController>Gibt zurück: Ein Promise, das mit
undefinederfüllt wird.readableType<any> Die OptionreadableTypeist für die zukünftige Verwendung reserviert und mussundefinedsein.writableType<any> Die OptionwritableTypeist für die zukünftige Verwendung reserviert und mussundefinedsein.
writableStrategy<Object>highWaterMark<number> Die maximale interne Warteschlangengröße, bevor Gegendruck angewendet wird.size<Function> Eine benutzerdefinierte Funktion, die verwendet wird, um die Größe jedes Datenchunks zu identifizieren.chunk<any>- Gibt zurück: <number>
readableStrategy<Object>highWaterMark<number> Die maximale interne Warteschlangengröße, bevor Gegendruck angewendet wird.size<Function> Eine benutzerdefinierte Funktion, die verwendet wird, um die Größe jedes Datenchunks zu identifizieren.chunk<any>- Gibt zurück: <number>
transformStream.readable
Hinzugefügt in: v16.5.0
- Typ: <ReadableStream>
transformStream.writable
Hinzugefügt in: v16.5.0
- Typ: <WritableStream>
Übertragung mit postMessage()
Eine <TransformStream>-Instanz kann mithilfe eines <MessagePort> übertragen werden.
const stream = new TransformStream();
const { port1, port2 } = new MessageChannel();
port1.onmessage = ({ data }) => {
const { writable, readable } = data;
// ...
};
port2.postMessage(stream, [stream]);Klasse: TransformStreamDefaultController
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
Der TransformStreamDefaultController verwaltet den internen Zustand des TransformStream.
transformStreamDefaultController.desiredSize
Hinzugefügt in: v16.5.0
- Typ: <number>
Die Datenmenge, die erforderlich ist, um die Warteschlange der lesbaren Seite zu füllen.
transformStreamDefaultController.enqueue([chunk])
Hinzugefügt in: v16.5.0
chunk<any>
Fügt der Warteschlange der lesbaren Seite einen Datenblock hinzu.
transformStreamDefaultController.error([reason])
Hinzugefügt in: v16.5.0
reason<any>
Signalisiert sowohl der lesbaren als auch der schreibbaren Seite, dass beim Verarbeiten der Transformationsdaten ein Fehler aufgetreten ist, wodurch beide Seiten abrupt geschlossen werden.
transformStreamDefaultController.terminate()
Hinzugefügt in: v16.5.0
Schließt die lesbare Seite des Transports und bewirkt, dass die schreibbare Seite abrupt mit einem Fehler geschlossen wird.
Klasse: ByteLengthQueuingStrategy
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
new ByteLengthQueuingStrategy(init)
Hinzugefügt in: v16.5.0
byteLengthQueuingStrategy.highWaterMark
Hinzugefügt in: v16.5.0
- Typ: <number>
byteLengthQueuingStrategy.size
Hinzugefügt in: v16.5.0
- Typ: <Function>
Klasse: CountQueuingStrategy
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.5.0 | Hinzugefügt in: v16.5.0 |
new CountQueuingStrategy(init)
Hinzugefügt in: v16.5.0
countQueuingStrategy.highWaterMark
Hinzugefügt in: v16.5.0
- Typ: <number>
countQueuingStrategy.size
Hinzugefügt in: v16.5.0
- Typ: <Function>
Klasse: TextEncoderStream
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.6.0 | Hinzugefügt in: v16.6.0 |
new TextEncoderStream()
Hinzugefügt in: v16.6.0
Erstellt eine neue TextEncoderStream-Instanz.
textEncoderStream.encoding
Hinzugefügt in: v16.6.0
- Typ: <string>
Die von der TextEncoderStream-Instanz unterstützte Kodierung.
textEncoderStream.readable
Hinzugefügt in: v16.6.0
- Typ: <ReadableStream>
textEncoderStream.writable
Hinzugefügt in: v16.6.0
- Typ: <WritableStream>
Klasse: TextDecoderStream
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v16.6.0 | Hinzugefügt in: v16.6.0 |
new TextDecoderStream([encoding[, options]])
Hinzugefügt in: v16.6.0
encoding<string> Identifiziert dieencoding, die dieseTextDecoder-Instanz unterstützt. Standard:'utf-8'.options<Object>fatal<boolean>true, wenn Dekodierungsfehler schwerwiegend sind.ignoreBOM<boolean> Wenntrue, enthält derTextDecoderStreamdie Byte Order Mark im dekodierten Ergebnis. Wennfalse, wird die Byte Order Mark aus der Ausgabe entfernt. Diese Option wird nur verwendet, wennencoding'utf-8','utf-16be'oder'utf-16le'ist. Standard:false.
Erstellt eine neue TextDecoderStream-Instanz.
textDecoderStream.encoding
Hinzugefügt in: v16.6.0
- Typ: <string>
Die von der TextDecoderStream-Instanz unterstützte Kodierung.
textDecoderStream.fatal
Hinzugefügt in: v16.6.0
- Typ: <boolean>
Der Wert ist true, wenn Dekodierungsfehler dazu führen, dass ein TypeError ausgelöst wird.
textDecoderStream.ignoreBOM
Hinzugefügt in: v16.6.0
- Typ: <boolean>
Der Wert ist true, wenn das Dekodierungsergebnis die Byte Order Mark enthält.
textDecoderStream.readable
Hinzugefügt in: v16.6.0
- Typ: <ReadableStream>
textDecoderStream.writable
Hinzugefügt in: v16.6.0
- Typ: <WritableStream>
Klasse: CompressionStream
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v17.0.0 | Hinzugefügt in: v17.0.0 |
new CompressionStream(format)
[Verlauf]
| Version | Änderungen |
|---|---|
| v21.2.0, v20.12.0 | Format akzeptiert jetzt den Wert deflate-raw. |
| v17.0.0 | Hinzugefügt in: v17.0.0 |
format<string> Einer von'deflate','deflate-raw'oder'gzip'.
compressionStream.readable
Hinzugefügt in: v17.0.0
- Typ: <ReadableStream>
compressionStream.writable
Hinzugefügt in: v17.0.0
- Typ: <WritableStream>
Klasse: DecompressionStream
[Verlauf]
| Version | Änderungen |
|---|---|
| v18.0.0 | Diese Klasse ist jetzt im globalen Objekt verfügbar. |
| v17.0.0 | Hinzugefügt in: v17.0.0 |
new DecompressionStream(format)
[Verlauf]
| Version | Änderungen |
|---|---|
| v21.2.0, v20.12.0 | Format akzeptiert jetzt den Wert deflate-raw. |
| v17.0.0 | Hinzugefügt in: v17.0.0 |
format<string> Einer von'deflate','deflate-raw'oder'gzip'.
decompressionStream.readable
Hinzugefügt in: v17.0.0
- Typ: <ReadableStream>
decompressionStream.writable
Hinzugefügt in: v17.0.0
- Typ: <WritableStream>
Utility-Konsumenten
Hinzugefügt in: v16.7.0
Die Utility-Konsumentenfunktionen bieten allgemeine Optionen für die Verarbeitung von Streams.
Sie werden wie folgt aufgerufen:
import {
arrayBuffer,
blob,
buffer,
json,
text,
} from 'node:stream/consumers';const {
arrayBuffer,
blob,
buffer,
json,
text,
} = require('node:stream/consumers');streamConsumers.arrayBuffer(stream)
Hinzugefügt in: v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Gibt zurück: <Promise> Wird mit einem
ArrayBuffererfüllt, der den gesamten Inhalt des Streams enthält.
import { arrayBuffer } from 'node:stream/consumers';
import { Readable } from 'node:stream';
import { TextEncoder } from 'node:util';
const encoder = new TextEncoder();
const dataArray = encoder.encode('hello world from consumers!');
const readable = Readable.from(dataArray);
const data = await arrayBuffer(readable);
console.log(`from readable: ${data.byteLength}`);
// Prints: from readable: 76const { arrayBuffer } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const { TextEncoder } = require('node:util');
const encoder = new TextEncoder();
const dataArray = encoder.encode('hello world from consumers!');
const readable = Readable.from(dataArray);
arrayBuffer(readable).then((data) => {
console.log(`from readable: ${data.byteLength}`);
// Prints: from readable: 76
});streamConsumers.blob(stream)
Hinzugefügt in: v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Gibt zurück: <Promise> Wird mit einem <Blob> erfüllt, der den gesamten Inhalt des Streams enthält.
import { blob } from 'node:stream/consumers';
const dataBlob = new Blob(['hello world from consumers!']);
const readable = dataBlob.stream();
const data = await blob(readable);
console.log(`from readable: ${data.size}`);
// Prints: from readable: 27const { blob } = require('node:stream/consumers');
const dataBlob = new Blob(['hello world from consumers!']);
const readable = dataBlob.stream();
blob(readable).then((data) => {
console.log(`from readable: ${data.size}`);
// Prints: from readable: 27
});streamConsumers.buffer(stream)
Hinzugefügt in: v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Gibt zurück: <Promise> Wird mit einem <Buffer> erfüllt, der den gesamten Inhalt des Streams enthält.
import { buffer } from 'node:stream/consumers';
import { Readable } from 'node:stream';
import { Buffer } from 'node:buffer';
const dataBuffer = Buffer.from('hello world from consumers!');
const readable = Readable.from(dataBuffer);
const data = await buffer(readable);
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27const { buffer } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const { Buffer } = require('node:buffer');
const dataBuffer = Buffer.from('hello world from consumers!');
const readable = Readable.from(dataBuffer);
buffer(readable).then((data) => {
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27
});streamConsumers.json(stream)
Hinzugefügt in: v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Gibt zurück: <Promise> Wird mit dem Inhalt des Streams erfüllt, der als UTF-8-codierte Zeichenkette geparst und dann durch
JSON.parse()geleitet wird.
import { json } from 'node:stream/consumers';
import { Readable } from 'node:stream';
const items = Array.from(
{
length: 100,
},
() => ({
message: 'hello world from consumers!',
}),
);
const readable = Readable.from(JSON.stringify(items));
const data = await json(readable);
console.log(`from readable: ${data.length}`);
// Prints: from readable: 100const { json } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const items = Array.from(
{
length: 100,
},
() => ({
message: 'hello world from consumers!',
}),
);
const readable = Readable.from(JSON.stringify(items));
json(readable).then((data) => {
console.log(`from readable: ${data.length}`);
// Prints: from readable: 100
});streamConsumers.text(stream)
Hinzugefügt in: v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Gibt zurück: <Promise> Wird mit dem Inhalt des Streams als UTF-8-kodierter Zeichenfolge aufgelöst.
import { text } from 'node:stream/consumers';
import { Readable } from 'node:stream';
const readable = Readable.from('Hello world from consumers!');
const data = await text(readable);
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27const { text } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const readable = Readable.from('Hello world from consumers!');
text(readable).then((data) => {
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27
});