Re: [whatwg/streams] add @@asyncIterator to ReadableStreamDefaultReader (#950)

@devsnek That could work... assuming we only add `readable[Symbol.asyncIterator]()`, and *not* `readable.getIterator({ preventCancel })`.

If we were to also add `readable.getIterator({ preventCancel })` as a shorthand for `readable.getReader().getIterator({ preventCancel })`, then the stream may end up being locked to a reader with no way to unlock it. Consider:
```js
const iterator = readable.getIterator({ preventCancel = true });
iterator.return();
// readable.locked === true;
```
Because `return()` does nothing when `preventCancel === true`, the stream stays locked to the iterator's reader.

What should happen in this case? We could call `reader.releaseLock()` from `iterator.return()`, except we might not be able to release the lock because there are still pending reads:
```js
const iterator = readable.getIterator({ preventCancel = true });
const readPromise = iterator.next();
iterator.return(); // can't unlock, since read is still pending... what now?
```

I don't know if this is a case we want to support. Perhaps we don't need this, and we only have `readable[Symbol.asyncIterator]()` which will always either consume the whole stream or cancel it.

-- 
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/950#issuecomment-417019807

Received on Wednesday, 29 August 2018 16:39:29 UTC