Browse Source

doc: resume a stream after pipe() and unpipe()

Clarifies the behavior of streams when _readableState.flowing is
false. resume() must be called explicitly for the 'data' event to
be emitted again.

Fixes: https://github.com/nodejs/node/issues/1041
PR-URL: https://github.com/nodejs/node/pull/13329
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
v6.x
Matteo Collina 8 years ago
committed by Myles Borins
parent
commit
cc492c361f
No known key found for this signature in database GPG Key ID: 933B01F40B5CA946
  1. 22
      doc/api/stream.md

22
doc/api/stream.md

@ -566,9 +566,8 @@ possible states:
* `readable._readableState.flowing = true` * `readable._readableState.flowing = true`
When `readable._readableState.flowing` is `null`, no mechanism for consuming the When `readable._readableState.flowing` is `null`, no mechanism for consuming the
streams data is provided so the stream will not generate its data. streams data is provided so the stream will not generate its data. While in this
state, attaching a listener for the `'data'` event, calling the `readable.pipe()`
Attaching a listener for the `'data'` event, calling the `readable.pipe()`
method, or calling the `readable.resume()` method will switch method, or calling the `readable.resume()` method will switch
`readable._readableState.flowing` to `true`, causing the Readable to begin `readable._readableState.flowing` to `true`, causing the Readable to begin
actively emitting events as data is generated. actively emitting events as data is generated.
@ -576,7 +575,22 @@ actively emitting events as data is generated.
Calling `readable.pause()`, `readable.unpipe()`, or receiving "back pressure" Calling `readable.pause()`, `readable.unpipe()`, or receiving "back pressure"
will cause the `readable._readableState.flowing` to be set as `false`, will cause the `readable._readableState.flowing` to be set as `false`,
temporarily halting the flowing of events but *not* halting the generation of temporarily halting the flowing of events but *not* halting the generation of
data. data. While in this state, attaching a listener for the `'data'` event
would not cause `readable._readableState.flowing` to switch to `true`.
```js
const { PassThrough, Writable } = require('stream');
const pass = new PassThrough();
const writable = new Writable();
pass.pipe(writable);
pass.unpipe(writable);
// flowing is now false
pass.on('data', (chunk) => { console.log(chunk.toString()); });
pass.write('ok'); // will not emit 'data'
pass.resume(); // must be called to make 'data' being emitted
```
While `readable._readableState.flowing` is `false`, data may be accumulating While `readable._readableState.flowing` is `false`, data may be accumulating
within the streams internal buffer. within the streams internal buffer.

Loading…
Cancel
Save