- From: Mattias Buelens <notifications@github.com>
- Date: Sun, 27 Jan 2019 08:30:53 -0800
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/pull/980/c457932482@github.com>
The tests have found a bug in the spec! 🎉
[This test](https://github.com/web-platform-tests/wpt/blob/ec6765af7c0cbd53bd8c3e9cfab1e54d5fee8e6a/streams/readable-streams/async-iterator.any.js#L216) fails with the current reference implementation. When calling `s.getReader()`, the stream is still locked to the iterator's reader.
The problem is that `it.return()` is not called whenever a `for await..of` loop **completes normally** (i.e. when `it.next()` resolves with `{done: true}`). A quick snippet to demonstrate:
```js
function testIterator() {
return {
[Symbol.asyncIterator]() {
return {
async next() {
console.log('next() called');
return {done: true};
},
async return() {
console.log('return() called');
}
};
}
};
}
(async () => {
console.log('before');
for await (const chunk of testIterator()) {
console.log({chunk});
}
console.log('after');
})();
```
This logs:
```
before
next() called
after
```
Clearly, the `return()` method was not called.
To fix this, we need to change the `next()` method to release the reader just before returning `{done: true}`. For example, we could change [this line in the reference implementation](https://github.com/whatwg/streams/blob/173af93b61a91032c1d270f2215c0683c95d3857/reference-implementation/lib/readable-stream.js#L184) to the following:
```js
return ReadableStreamDefaultReaderRead(reader)
.then(({ value, done }) => {
if (done) {
ReadableStreamReaderGenericRelease(reader);
}
return ReadableStreamCreateReadResult(value, done);
});
```
Similarly, the spec text should be updated to transform the returned promise with this fulfillment handler.
@domenic @ricea @devsnek Thoughts?
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/pull/980#issuecomment-457932482
Received on Sunday, 27 January 2019 16:31:15 UTC