You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I discussed this a bit with Adam in person, but for the record, my opinions are:
Yes; per the current spec either true or false is allowed
Probably no; allowing browsers to differ in this seems too much of a sharp edge for interop. It's too easy for web developers to write code which assumes either sync or async, and only test in one browser, and get bad results in the other.
Unclear.
So my vote would be for ensuring that writes do not occur synchronously, and are at least delayed by a queued microtask.
awaitPromise.resolve().then(async()=>{letsynchronous=false;letreadable=newReadableStream({pull(){synchronous=true;}},{highWaterMark: 0});awaitnewPromise(setTimeout);// make sure the stream is startedreadable.pipeTo(newWritableStream());console.log(synchronous);});
This logs true on Gecko/Blink but false on WebKit. Maybe it's more natural to be synchronous here as getReader().read() pulls synchronously, except I'm not a fan of synchronous JS call...
Another issue:
...
This logs true on Gecko/Blink but false on WebKit. Maybe it's more natural to be synchronous here as getReader().read() pulls synchronously, except I'm not a fan of synchronous JS call...
Previously we considered this kind of thing "acceptable variation". If I recall correctly there was a similar difference between Blink's implementation and the reference implementation.
The aim in specifying pipeTo() was to specify a set of constraints, and permit implementations to very within those constraints in order to allow for optimisation. Maybe now we want to be more strict.
Activity
domenic commentedon Oct 16, 2022
I discussed this a bit with Adam in person, but for the record, my opinions are:
So my vote would be for ensuring that writes do not occur synchronously, and are at least delayed by a queued microtask.
ricea commentedon Oct 26, 2022
Okay. If there are no conflicting opinions then @nidhijaju or I will write a PR to prohibit synchronous behaviour.
saschanaz commentedon Mar 16, 2023
Has this happened? I found Gecko is behaving synchronously and intend to write WPT for this.
ricea commentedon Mar 16, 2023
Sorry, no, it slipped off my radar. Some WPT would be great!
saschanaz commentedon Mar 31, 2023
Another issue:
This logs true on Gecko/Blink but false on WebKit. Maybe it's more natural to be synchronous here as
getReader().read()pulls synchronously, except I'm not a fan of synchronous JS call...Edit: The WPT test for the enqueue issue is landed here web-platform-tests/wpt#39103
ricea commentedon Apr 3, 2023
Previously we considered this kind of thing "acceptable variation". If I recall correctly there was a similar difference between Blink's implementation and the reference implementation.
The aim in specifying pipeTo() was to specify a set of constraints, and permit implementations to very within those constraints in order to allow for optimisation. Maybe now we want to be more strict.
Thanks!
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec
stream: fix pipeTo to defer writes per WHATWG spec