Aller au contenu

WHATWG Streams

Flux en lecture, en écriture, de transformation, d'octets et BYOB.

Sur cette page

Elide expose des flux en lecture, en écriture et de transformation, avec lecteurs, écrivains, contrôleurs, stratégies de mise en file, redirection (piping), duplication (tee) et itération asynchrone.

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

Les flux en lecture fournissent cancel(), getReader(), pipeThrough(), pipeTo(), tee(), l’itération asynchrone, values() et ReadableStream.from().

WritableStream et TransformStream

Les flux en écriture fournissent abort(), close() et getWriter(). Les flux de transformation associent une entrée accessible en écriture à une sortie accessible en lecture.

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

La contre-pression utilise le highWaterMark et l’algorithme size configurés. CountQueuingStrategy et ByteLengthQueuingStrategy sont des globales.

Flux d’octets et BYOB

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]

Les opérations BYOB transfèrent et détachent le tampon fourni. Réutiliser la vue d’origine lève une erreur. Les flux transférables sont pris en charge au sein d’un même realm ; le transfert entre workers reste limité.

Consultez Compression Streams pour les transformations d’octets.

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

Cette page vous a-t-elle aidé ?