Skip to content

Web Streams API

[Verlauf]

VersionÄnderungen
v21.0.0Nicht mehr experimentell.
v18.0.0Die Verwendung dieser API gibt keine Laufzeitwarnung mehr aus.
v16.5.0Hinzugefü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.

js
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);
js
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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefü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 des ReadableStream aufgerufen wird.

    • controller <ReadableStreamDefaultController> | <ReadableByteStreamController>

    • Gibt zurück: undefined oder ein Promise, das mit undefined erfüllt wird.

    • pull <Function> Eine benutzerdefinierte Funktion, die wiederholt aufgerufen wird, wenn die interne Warteschlange des ReadableStream 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 der ReadableStream abgebrochen wird.

    • reason <any>

    • Gibt zurück: Ein Promise, das mit undefined erfüllt wird.

    • type <string> Muss 'bytes' oder undefined sein.

    • autoAllocateChunkSize <number> Wird nur verwendet, wenn type gleich 'bytes' ist. Wenn auf einen Wert ungleich Null gesetzt, wird automatisch ein View-Buffer für ReadableByteStreamController.byobRequest zugewiesen. Wenn nicht festgelegt, muss man die internen Warteschlangen des Streams verwenden, um Daten über den Standardleser ReadableStreamDefaultReader 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

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

js
import { ReadableStream } from 'node:stream/web';

const stream = new ReadableStream();

const reader = stream.getReader();

console.log(await reader.read());
js
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> Der ReadableStream, an den transform.writable die potenziell modifizierten Daten pusht, die er von diesem ReadableStream empfängt.
    • writable <WritableStream> Der WritableStream, in den die Daten dieses ReadableStream geschrieben werden.
  • options <Object>

    • preventAbort <boolean> Wenn true, führen Fehler in diesem ReadableStream nicht dazu, dass transform.writable abgebrochen wird.
    • preventCancel <boolean> Wenn true, führen Fehler im Ziel transform.writable nicht dazu, dass dieser ReadableStream abgebrochen wird.
    • preventClose <boolean> Wenn true, führt das Schließen dieses ReadableStream nicht dazu, dass transform.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.

js
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
js
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 dieses ReadableStream geschrieben werden.

  • options <Object>

    • preventAbort <boolean> Wenn true, führen Fehler in diesem ReadableStream nicht dazu, dass destination abgebrochen wird.
    • preventCancel <boolean> Wenn true, führen Fehler im destination nicht dazu, dass dieser ReadableStream abgebrochen wird.
    • preventClose <boolean> Wenn true, führt das Schließen dieses ReadableStream nicht dazu, dass destination 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.0Unterstützung für das Verzweigen eines lesbaren Byte-Streams.
v16.5.0Hinzugefügt in: v16.5.0

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> Wenn true, 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.

js
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.

js
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.

js
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-Protokoll Symbol.asyncIterator oder Symbol.iterator implementiert.

Eine Hilfsmethode, die einen neuen <ReadableStream> aus einem Iterable erstellt.

js
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'
js
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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefü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

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

  • Gibt zurück: Ein Promise, das mit einem Objekt erfüllt wird:

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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefü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.

js
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

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.0Option min hinzugefügt.
v16.5.0Hinzugefügt in: v16.5.0

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

Gibt die Datenmenge zurück, die zum Füllen der Warteschlange des <ReadableStream> verbleibt.

readableStreamDefaultController.enqueue([chunk])

Hinzugefügt in: v16.5.0

Fügt der Warteschlange des <ReadableStream> einen neuen Datenblock hinzu.

readableStreamDefaultController.error([error])

Hinzugefügt in: v16.5.0

Signalisiert einen Fehler, der dazu führt, dass der <ReadableStream> einen Fehler ausgibt und geschlossen wird.

Klasse: ReadableByteStreamController

[Verlauf]

VersionÄnderungen
v18.10.0Unterstützung für die Handhabung einer BYOB-Pull-Anfrage von einem freigegebenen Reader.
v16.5.0Hinzugefü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

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

Fügt einen neuen Datenblock an die Warteschlange des <ReadableStream> an.

readableByteStreamController.error([error])

Hinzugefügt in: v16.5.0

Signalisiert einen Fehler, der dazu führt, dass der <ReadableStream> einen Fehler ausgibt und sich schließt.

Klasse: ReadableStreamBYOBRequest

[Verlauf]

VersionÄnderungen
v18.0.0Diese Klasse wird nun im globalen Objekt bereitgestellt.
v16.5.0Hinzugefü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

Signalisiert, dass eine Anzahl von bytesWritten Bytes in readableStreamBYOBRequest.view geschrieben wurde.

readableStreamBYOBRequest.respondWithNewView(view)

Hinzugefügt in: v16.5.0

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

Klasse: WritableStream

[Historie]

VersionÄnderungen
v18.0.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefügt in: v16.5.0

Der WritableStream ist ein Ziel, an das Stream-Daten gesendet werden.

js
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 der WritableStream erstellt wird.

    • controller <WritableStreamDefaultController>

    • Gibt zurück: undefined oder ein Promise, das mit undefined erfüllt wird.

    • write <Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn ein Datenchunk in den WritableStream 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 der WritableStream geschlossen wird.

    • Gibt zurück: Ein Promise, das mit undefined erfüllt wird.

    • abort <Function> Eine benutzerdefinierte Funktion, die aufgerufen wird, um den WritableStream abrupt zu schließen.

    • reason <any>

    • Gibt zurück: Ein Promise, das mit undefined erfüllt wird.

    • type <any> Die Option type 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

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

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.

js
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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefügt in: v16.5.0

new WritableStreamDefaultWriter(stream)

Hinzugefügt in: v16.5.0

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

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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefügt in: v16.5.0

Der WritableStreamDefaultController verwaltet den internen Zustand des <WritableStream>.

writableStreamDefaultController.error([error])

Hinzugefügt in: v16.5.0

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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefü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.

js
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 der TransformStream erstellt wird.

    • controller <TransformStreamDefaultController>

    • Gibt zurück: undefined oder ein Promise, das mit undefined erfüllt wird.

    • transform <Function> Eine benutzerdefinierte Funktion, die einen Datenchunk empfängt und möglicherweise modifiziert, der in transformStream.writable geschrieben wurde, bevor er an transformStream.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 des TransformStream aufgerufen wird und das Ende des Transformationsprozesses signalisiert.

    • controller <TransformStreamDefaultController>

    • Gibt zurück: Ein Promise, das mit undefined erfüllt wird.

    • readableType <any> Die Option readableType ist für die zukünftige Verwendung reserviert und muss undefined sein.

    • writableType <any> Die Option writableType ist für die zukünftige Verwendung reserviert und muss undefined 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

transformStream.writable

Hinzugefügt in: v16.5.0

Übertragung mit postMessage()

Eine <TransformStream>-Instanz kann mithilfe eines <MessagePort> übertragen werden.

js
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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefügt in: v16.5.0

Der TransformStreamDefaultController verwaltet den internen Zustand des TransformStream.

transformStreamDefaultController.desiredSize

Hinzugefügt in: v16.5.0

Die Datenmenge, die erforderlich ist, um die Warteschlange der lesbaren Seite zu füllen.

transformStreamDefaultController.enqueue([chunk])

Hinzugefügt in: v16.5.0

Fügt der Warteschlange der lesbaren Seite einen Datenblock hinzu.

transformStreamDefaultController.error([reason])

Hinzugefügt in: v16.5.0

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.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefügt in: v16.5.0

new ByteLengthQueuingStrategy(init)

Hinzugefügt in: v16.5.0

byteLengthQueuingStrategy.highWaterMark

Hinzugefügt in: v16.5.0

byteLengthQueuingStrategy.size

Hinzugefügt in: v16.5.0

Klasse: CountQueuingStrategy

[Verlauf]

VersionÄnderungen
v18.0.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.5.0Hinzugefügt in: v16.5.0

new CountQueuingStrategy(init)

Hinzugefügt in: v16.5.0

countQueuingStrategy.highWaterMark

Hinzugefügt in: v16.5.0

countQueuingStrategy.size

Hinzugefügt in: v16.5.0

Klasse: TextEncoderStream

[Verlauf]

VersionÄnderungen
v18.0.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.6.0Hinzugefü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

Die von der TextEncoderStream-Instanz unterstützte Kodierung.

textEncoderStream.readable

Hinzugefügt in: v16.6.0

textEncoderStream.writable

Hinzugefügt in: v16.6.0

Klasse: TextDecoderStream

[Verlauf]

VersionÄnderungen
v18.0.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v16.6.0Hinzugefügt in: v16.6.0

new TextDecoderStream([encoding[, options]])

Hinzugefügt in: v16.6.0

  • encoding <string> Identifiziert die encoding, die diese TextDecoder-Instanz unterstützt. Standard: 'utf-8'.
  • options <Object>
    • fatal <boolean> true, wenn Dekodierungsfehler schwerwiegend sind.
    • ignoreBOM <boolean> Wenn true, enthält der TextDecoderStream die Byte Order Mark im dekodierten Ergebnis. Wenn false, wird die Byte Order Mark aus der Ausgabe entfernt. Diese Option wird nur verwendet, wenn encoding 'utf-8', 'utf-16be' oder 'utf-16le' ist. Standard: false.

Erstellt eine neue TextDecoderStream-Instanz.

textDecoderStream.encoding

Hinzugefügt in: v16.6.0

Die von der TextDecoderStream-Instanz unterstützte Kodierung.

textDecoderStream.fatal

Hinzugefügt in: v16.6.0

Der Wert ist true, wenn Dekodierungsfehler dazu führen, dass ein TypeError ausgelöst wird.

textDecoderStream.ignoreBOM

Hinzugefügt in: v16.6.0

Der Wert ist true, wenn das Dekodierungsergebnis die Byte Order Mark enthält.

textDecoderStream.readable

Hinzugefügt in: v16.6.0

textDecoderStream.writable

Hinzugefügt in: v16.6.0

Klasse: CompressionStream

[Verlauf]

VersionÄnderungen
v18.0.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v17.0.0Hinzugefügt in: v17.0.0

new CompressionStream(format)

[Verlauf]

VersionÄnderungen
v21.2.0, v20.12.0Format akzeptiert jetzt den Wert deflate-raw.
v17.0.0Hinzugefügt in: v17.0.0
  • format <string> Einer von 'deflate', 'deflate-raw' oder 'gzip'.

compressionStream.readable

Hinzugefügt in: v17.0.0

compressionStream.writable

Hinzugefügt in: v17.0.0

Klasse: DecompressionStream

[Verlauf]

VersionÄnderungen
v18.0.0Diese Klasse ist jetzt im globalen Objekt verfügbar.
v17.0.0Hinzugefügt in: v17.0.0

new DecompressionStream(format)

[Verlauf]

VersionÄnderungen
v21.2.0, v20.12.0Format akzeptiert jetzt den Wert deflate-raw.
v17.0.0Hinzugefügt in: v17.0.0
  • format <string> Einer von 'deflate', 'deflate-raw' oder 'gzip'.

decompressionStream.readable

Hinzugefügt in: v17.0.0

decompressionStream.writable

Hinzugefügt in: v17.0.0

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:

js
import {
  arrayBuffer,
  blob,
  buffer,
  json,
  text,
} from 'node:stream/consumers';
js
const {
  arrayBuffer,
  blob,
  buffer,
  json,
  text,
} = require('node:stream/consumers');

streamConsumers.arrayBuffer(stream)

Hinzugefügt in: v16.7.0

js
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
js
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

js
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
js
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

js
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
js
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

js
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
js
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

js
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
js
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
});