// npm i web-streams-polyfill const streams = require("web-streams-polyfill"); const {ReadableStream, WritableStream, TransformStream} = streams; // writable stream //NOTE: writable has no byte-array specific implementations const ws1 = new WritableStream({ async start(controller) { // called by constructor console.log("[start]"); // to do some (asynchronous) initialization }, async write(chunk, controller) { // called when writer.write() console.log("[write]", chunk); }, async close(controller) { console.log("[close]"); }, async abort(reason) { // called when ws.abort(reason) console.log("[abort]", reason); } }); (async () => { console.log(ws1.getWriter); const w1 = ws1.getWriter(); //NOTE: write and close may spawn error for (const v of ["a", "b", "c"]) { await w1.write(v); } await w1.close(); })().catch(console.error); // NOTE on difference between `close()` and `abort()` // - close() is sequentially called after former write()s are finished // - abort() is quickly called even if former write() is not yet finished