- From: David Halls <notifications@github.com>
- Date: Sat, 15 Oct 2022 22:52:15 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1244@github.com>
I've got a question about stream reader `closed` promise, specifically whether it should resolve before all enqueued data has been read.
In the program below, I'm seeing the message `data not read yet` being logged. I was assuming `reader.closed` wouldn't get resolved until the program had read the data.
```js
const rs = new ReadableStream({
start(controller) {
controller.enqueue(new Uint8Array(3));
controller.close();
}
});
let data = null;
const reader = rs.getReader();
reader.closed.then(() => {
if (!data) {
console.error('data not read yet');
}
});
data = await reader.read();
console.log(data);
data = await reader.read();
console.log(data);
```
I'm seeing this in Chrome, Firefox and Node.
So I read the spec and in https://streams.spec.whatwg.org/#rs-default-controller-private-pull ReadableStreamClose is performed before the read request's chunk steps which explains what I'm seeing. (Indeed I looked at Node's implementation and it follows the spec).
Is this how `closed` is supposed to behave? It has implications for the calling application. For example, Node uses it to push EOF in its stream adapter and this causes https://github.com/nodejs/node/issues/42694
--
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/issues/1244
You are receiving this because you are subscribed to this thread.
Message ID: <whatwg/streams/issues/1244@github.com>
Received on Sunday, 16 October 2022 05:52:27 UTC