- From: Kagami Sascha Rosylight <notifications@github.com>
- Date: Wed, 18 Oct 2023 12:40:04 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1298@github.com>
### What is the issue with the Streams Standard? I was investigating further on #1296 and found that this snippet emits different logs on different implementations: ```js new WritableStream({ async start() {}, async write(chunk) { console.log(chunk) } }).getWriter().write('write'); Promise.resolve('promise').then(console.log) ``` * The reference impl, Gecko, Deno: promise write * WebKit, Blink, Node.js: write promise [UnderlyingSinkStartCallback](https://streams.spec.whatwg.org/#callbackdef-underlyingsinkstartcallback) returns `any`, so the IDL promise conversion doesn't happen here, and thus `startResult` of step 15 becomes the raw JS promise. Then step 16 wraps it with a new promise via "a promise resolved with" algorithm, and thus it takes two rounds for the listener of `startPromise` to be called. `Promise.resolve().then()` only takes one round, so the result here should be `promise write`, as the reference impl shows. Instead, WebKit and Blink somehow effectively uses `Promise.resolve()` on the return value of startPromise: https://bugzilla.mozilla.org/show_bug.cgi?id=1859853#c1 I think we need a discussion as the implementations are divided here. I guess the spec ended up with "a promise resolved with" wrapper steps as that's what Web IDL does, but is there a real point to wrap `startResult` that way? What bad thing happens when we just use `Promise.resolve()` as WebKit/Blink/Node.js do? -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/streams/issues/1298 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/streams/issues/1298@github.com>
Received on Wednesday, 18 October 2023 19:40:09 UTC