Elide предоставляет читаемые, записываемые и преобразующие потоки с читателями, писателями, контроллерами, стратегиями очередей, конвейерами, разветвлением и асинхронной итерацией.
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Читаемые потоки предоставляют cancel(), getReader(), pipeThrough(),
pipeTo(), tee(), асинхронную итерацию, values() и
ReadableStream.from().
WritableStream и TransformStream
Записываемые потоки предоставляют abort(), close() и getWriter().
Преобразующие потоки связывают записываемый вход с читаемым выходом.
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);Противодавление использует настроенный highWaterMark и алгоритм size.
CountQueuingStrategy и ByteLengthQueuingStrategy — глобальные объекты.
Байтовые и 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]Операции BYOB передают и отсоединяют переданный буфер. Повторное использование исходного представления приводит к исключению. Передаваемые потоки поддерживаются в пределах одного realm; передача между воркерами остаётся ограниченной.
Байтовые преобразования описаны в разделе Потоки сжатия.
Reference
Status: Full · Not measured · since 1.1.0
Exports
| Export | Kind | Status | Notes |
|---|---|---|---|
ReadableStream | class | Full | locked, cancel(), getReader(), pipeThrough(), pipeTo(), tee() |
ReadableStreamDefaultReader | class | Full | closed, read(), releaseLock(), cancel() |
ReadableStreamDefaultController | class | Full | desiredSize, close(), enqueue(), error() |
ReadableStreamBYOBReader | class | Full | closed, read(), releaseLock(), cancel() |
ReadableByteStreamController | class | Full | byobRequest, desiredSize, close(), enqueue(), error() |
ReadableStreamBYOBRequest | class | Full | view, respond(), respondWithNewView() |
WritableStream | class | Full | locked, abort(), close(), getWriter() |
WritableStreamDefaultWriter | class | Full | closed, desiredSize, ready, abort(), close(), releaseLock(), write() |
WritableStreamDefaultController | class | Full | signal, error() |
TransformStream | class | Full | readable, writable |
TransformStreamDefaultController | class | Full | desiredSize, enqueue(), error(), terminate() |
CountQueuingStrategy | class | Full | highWaterMark, size |
ByteLengthQueuingStrategy | class | Full | highWaterMark, size |