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 desReadableStream
aufgerufen wird.controller
<ReadableStreamDefaultController> | <ReadableByteStreamController>Gibt zurück:
undefined
oder ein Promise, das mitundefined
erfüllt wird.pull
<Function> Eine benutzerdefinierte Funktion, die wiederholt aufgerufen wird, wenn die interne Warteschlange desReadableStream
nicht 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
undefined
erfüllt wird.cancel
<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn derReadableStream
abgebrochen wird.reason
<any>Gibt zurück: Ein Promise, das mit
undefined
erfüllt wird.type
<string> Muss'bytes'
oderundefined
sein.autoAllocateChunkSize
<number> Wird nur verwendet, wenntype
gleich'bytes'
ist. Wenn auf einen Wert ungleich Null gesetzt, wird automatisch ein View-Buffer fürReadableByteStreamController.byobRequest
zugewiesen. Wenn nicht festgelegt, muss man die internen Warteschlangen des Streams verwenden, um Daten über den StandardleserReadableStreamDefaultReader
zu ü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
true
gesetzt, 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
undefined
erfü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.writable
die potenziell modifizierten Daten pusht, die er von diesemReadableStream
empfängt.writable
<WritableStream> DerWritableStream
, in den die Daten diesesReadableStream
geschrieben werden.
options
<Object>preventAbort
<boolean> Wenntrue
, führen Fehler in diesemReadableStream
nicht dazu, dasstransform.writable
abgebrochen wird.preventCancel
<boolean> Wenntrue
, führen Fehler im Zieltransform.writable
nicht dazu, dass dieserReadableStream
abgebrochen wird.preventClose
<boolean> Wenntrue
, führt das Schließen diesesReadableStream
nicht dazu, dasstransform.writable
geschlossen 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: A
const {
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 diesesReadableStream
geschrieben werden.options
<Object>preventAbort
<boolean> Wenntrue
, führen Fehler in diesemReadableStream
nicht dazu, dassdestination
abgebrochen wird.preventCancel
<boolean> Wenntrue
, führen Fehler imdestination
nicht dazu, dass dieserReadableStream
abgebrochen wird.preventClose
<boolean> Wenntrue
, führt das Schließen diesesReadableStream
nicht dazu, dassdestination
geschlossen wird.signal
<AbortSignal> Ermöglicht das Abbrechen der Datenübertragung mithilfe eines <AbortController>.
Gibt zurück: Ein Promise, das mit
undefined
erfü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.asyncIterator
oderSymbol.iterator
implementiert.
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
undefined
erfü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
undefined
erfü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
undefined
erfü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, sobaldmin
Anzahl 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 Buffer
n 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 ReadableStream
s, 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 ReadableStream
s.
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 derWritableStream
erstellt wird.controller
<WritableStreamDefaultController>Gibt zurück:
undefined
oder ein Promise, das mitundefined
erfüllt wird.write
<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn ein Datenchunk in denWritableStream
geschrieben wurde.chunk
<any>controller
<WritableStreamDefaultController>Gibt zurück: Ein Promise, das mit
undefined
erfüllt wird.close
<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn derWritableStream
geschlossen wird.Gibt zurück: Ein Promise, das mit
undefined
erfüllt wird.abort
<Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, um denWritableStream
abrupt zu schließen.reason
<any>Gibt zurück: Ein Promise, das mit
undefined
erfüllt wird.type
<any> Die Optiontype
ist 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
undefined
erfü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
undefined
erfü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
undefined
erfü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
undefined
erfü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
undefined
erfü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 derTransformStream
erstellt wird.controller
<TransformStreamDefaultController>Gibt zurück:
undefined
oder ein Promise, das mitundefined
erfüllt wird.transform
<Function> Eine benutzerdefinierte Funktion, die einen Datenchunk empfängt und möglicherweise modifiziert, der intransformStream.writable
geschrieben wurde, bevor er antransformStream.readable
weitergeleitet wird.chunk
<any>controller
<TransformStreamDefaultController>Gibt zurück: Ein Promise, das mit
undefined
erfüllt wird.flush
<Function> Eine benutzerdefinierte Funktion, die unmittelbar vor dem Schließen der beschreibbaren Seite desTransformStream
aufgerufen wird und das Ende des Transformationsprozesses signalisiert.controller
<TransformStreamDefaultController>Gibt zurück: Ein Promise, das mit
undefined
erfüllt wird.readableType
<any> Die OptionreadableType
ist für die zukünftige Verwendung reserviert und mussundefined
sein.writableType
<any> Die OptionwritableType
ist für die zukünftige Verwendung reserviert und mussundefined
sein.
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 derTextDecoderStream
die 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
ArrayBuffer
erfü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: 76
const { 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: 27
const { 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: 27
const { 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: 100
const { 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: 27
const { 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
});