Skip to content

Commit

Permalink
doc: further fix async iterator example
Browse files Browse the repository at this point in the history
Further fixes an issue with the async iterator example where an
incorrect assumption was made in regards that drain or error
is always invoked after !write().

Fixes: #31365

PR-URL: #31367
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
  • Loading branch information
ronag authored and codebytere committed Mar 17, 2020
1 parent f0b5f9f commit 821b9ac
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions doc/api/stream.md
Original file line number Diff line number Diff line change
Expand Up @@ -2639,12 +2639,22 @@ const finished = util.promisify(stream.finished);

const writable = fs.createWriteStream('./file');

function drain(writable) {
if (writable.destroyed) {
return Promise.reject(new Error('premature close'));
}
return Promise.race([
once(writable, 'drain'),
once(writable, 'close')
.then(() => Promise.reject(new Error('premature close')))
]);
}

async function pump(iterable, writable) {
for await (const chunk of iterable) {
// Handle backpressure on write().
if (!writable.write(chunk)) {
if (writable.destroyed) return;
await once(writable, 'drain');
await drain(writable);
}
}
writable.end();
Expand Down

0 comments on commit 821b9ac

Please sign in to comment.