Elide надає потоки для читання, запису та перетворення з засобами читання, засобами запису, контролерами, стратегіями черг, конвеєрами, розгалуженням (tee) й асинхронною ітерацією.
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);Протитиск (backpressure) використовує налаштований 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 |