Zum Inhalt springen

WHATWG Streams

Lesbare, beschreibbare, transformierende, Byte- und BYOB-Streams.

Auf dieser Seite

Elide stellt lesbare, beschreibbare und transformierende Streams mit Readern, Writern, Controllern, Queuing-Strategien, Piping, Teeing und asynchroner Iteration bereit.

ReadableStream

const stream = new ReadableStream({
  start(controller) {
    controller.enqueue("hello");
    controller.enqueue("world");
    controller.close();
  },
});

const reader = stream.getReader();
(await reader.read()).value; // "hello"
(await reader.read()).value; // "world"
(await reader.read()).done;  // true

Lesbare Streams bieten cancel(), getReader(), pipeThrough(), pipeTo(), tee(), asynchrone Iteration, values() und ReadableStream.from().

WritableStream und TransformStream

Beschreibbare Streams bieten abort(), close() und getWriter(). Transformierende Streams verbinden eine beschreibbare Eingabe mit einer lesbaren Ausgabe.

const upper = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  },
});

const source = ReadableStream.from(["hello"]);
const destination = new WritableStream({
  write(chunk) {
    console.log(chunk); // HELLO
  },
});

await source.pipeThrough(upper).pipeTo(destination);

Backpressure verwendet das konfigurierte highWaterMark und den size-Algorithmus. CountQueuingStrategy und ByteLengthQueuingStrategy sind Globals.

Byte- und BYOB-Streams

const bytes = new ReadableStream({
  type: "bytes",
  start(controller) {
    controller.enqueue(new Uint8Array([1, 2, 3]));
    controller.close();
  },
});

const reader = bytes.getReader({ mode: "byob" });
const target = new Uint8Array(8);
const pending = reader.read(target);
target.buffer.byteLength; // 0: transferred immediately

const { value } = await pending;
Array.from(value); // [1, 2, 3]

BYOB-Operationen übertragen und lösen den übergebenen Buffer. Die Wiederverwendung der ursprünglichen View wirft. Übertragbare Streams werden innerhalb desselben Realms unterstützt; die Übertragung zwischen Workern bleibt eingeschränkt.

Byte-Transformationen sind unter Compression Streams beschrieben.

Reference

Status: Full · Not measured · since 1.1.0

Exports

ExportKindStatusNotes
ReadableStreamclassFulllocked, cancel(), getReader(), pipeThrough(), pipeTo(), tee()
ReadableStreamDefaultReaderclassFullclosed, read(), releaseLock(), cancel()
ReadableStreamDefaultControllerclassFulldesiredSize, close(), enqueue(), error()
ReadableStreamBYOBReaderclassFullclosed, read(), releaseLock(), cancel()
ReadableByteStreamControllerclassFullbyobRequest, desiredSize, close(), enqueue(), error()
ReadableStreamBYOBRequestclassFullview, respond(), respondWithNewView()
WritableStreamclassFulllocked, abort(), close(), getWriter()
WritableStreamDefaultWriterclassFullclosed, desiredSize, ready, abort(), close(), releaseLock(), write()
WritableStreamDefaultControllerclassFullsignal, error()
TransformStreamclassFullreadable, writable
TransformStreamDefaultControllerclassFulldesiredSize, enqueue(), error(), terminate()
CountQueuingStrategyclassFullhighWaterMark, size
ByteLengthQueuingStrategyclassFullhighWaterMark, size

War diese Seite hilfreich?