- From: Takeshi Yoshino <notifications@github.com>
- Date: Mon, 18 Jan 2016 04:59:31 -0800
- To: whatwg/streams <streams@noreply.github.com>
- Message-ID: <whatwg/streams/issues/423/172521385@github.com>
> This basically means, once a pull happens, you keep doing pull until desiredSize = 0? And, once a pullInto happens, you keep doing pullInto until .... when?
We keep doing pull if some operation that suggests running pull again happens inside that pull.
For example,
```
pull() {
controller.enqueue(x);
}
```
Currently, in the ReadableStream with non-byte source, EnqueueInReadableStreamController() does that. It sets pullAgain, and in the pullPromise handler, ReadableStreamControllerCallPullIfNeeded() is ran again. ReadableStream with byte source does this by using a while loop.
If any operation (which suggests running pull/pullInto again) doesn't occur inside a pull/pullInto invocation, we stop the loop.
For example, when stream.read(view) is invoked and view is a Uint32Array,
```
pullInto(<view>);
// enqueue() was called with 1 byte. Call pullInto again to notify that more data is needed
pullInto(<view with new region (the 1st byte was filled)>);
// enqueue() was called with 1 byte. One more.
pullInto(<view with new region (2 bytes has been filled)>);
// Nothing happened this time. Stop running pull() and wait for the source to generate more data
```
---
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/issues/423#issuecomment-172521385
Received on Monday, 18 January 2016 13:00:03 UTC