Skip to content

Commit

Permalink
doc: explain stream.finished cleanup
Browse files Browse the repository at this point in the history
PR-URL: #28935
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
  • Loading branch information
ronag authored and BridgeAR committed Sep 25, 2019
1 parent 84b353c commit 3ba6464
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions doc/api/stream.md
Original file line number Diff line number Diff line change
Expand Up @@ -1478,6 +1478,8 @@ added: v10.0.0
**Default**: `true`.
* `callback` {Function} A callback function that takes an optional error
argument.
* Returns: {Function} A cleanup function which removes all registered
listeners.

A function to get notified when a stream is no longer readable, writable
or has experienced an error or a premature close event.
Expand Down Expand Up @@ -1518,6 +1520,20 @@ run().catch(console.error);
rs.resume(); // Drain the stream.
```

`stream.finished()` leaves dangling event listeners (in particular
`'error'`, `'end'`, `'finish'` and `'close'`) after `callback` has been
invoked. The reason for this is so that unexpected `'error'` events (due to
incorrect stream implementations) do not cause unexpected crashes.
If this is unwanted behavior then the returned cleanup function needs to be
invoked in the callback:

```js
const cleanup = finished(...streams, (err) => {
cleanup();
// ...
});
```

### stream.pipeline(...streams, callback)
<!-- YAML
added: v10.0.0
Expand Down Expand Up @@ -1571,6 +1587,10 @@ async function run() {
run().catch(console.error);
```

`stream.pipeline()` leaves dangling event listeners on the streams
after the `callback` has been invoked. In the case of reuse of streams after
failure, this can cause event listener leaks and swallowed errors.

### stream.Readable.from(iterable, [options])
<!-- YAML
added: v12.3.0
Expand Down

0 comments on commit 3ba6464

Please sign in to comment.