whatwg / streams

Streams Standard
https://streams.spec.whatwg.org/
Other
1.34k stars 155 forks source link

Proposal: writev equivalent `WritableStreamDefaultWriter` #1309

Closed jasnell closed 3 months ago

jasnell commented 3 months ago

What problem are you trying to solve?

Today, writing multiple values at once to a WritableStream is not generally possible or efficient. Each individual call to write(...) assumes a single value, with a single promise returned per value.

What solutions exist today?

Node.js stream.Writable offers both write(...) and writev(...) options. The write(...) takes a single value while writev(...) takes multiple.

How would you solve it?

Introduce a new writev(...) method to WritableStreamDefaultWriter (or something similar)

So instead of something like...

const writable = getWritableStreamSomehow();
const writer = writable.getWriter();
await Promise.all([
  writer.write('hello'),
  writer.write('world'),
  writer.write('!!!'),
]);  // Creates at least four promises...

We could simply (and efficiently do)

const writable = getWritableStreamSomehow();
const writer = writable.getWriter();
await writer.writev(['hello', 'world', '!!!']);  // Creates only one promise

The writev(...) method would accept any iterable or async-iterable as the input.

Anything else?

No response

domenic commented 3 months ago

Dupe of #27.

jasnell commented 3 months ago

Hmmm, #27 appears to be quite old and stale at this point, and the approach discussed here is fairly different (focusing only on adding writev to the existing WritableStreamDefaultWriter. Yes there is overlap in the problem space but I don't really agree that this is a duplicate of that issue.