Skip to content

Commit 821b9ac

Browse files
ronagcodebytere
authored andcommitted
doc: further fix async iterator example
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 <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent f0b5f9f commit 821b9ac

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

doc/api/stream.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2639,12 +2639,22 @@ const finished = util.promisify(stream.finished);
26392639

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

2642+
function drain(writable) {
2643+
if (writable.destroyed) {
2644+
return Promise.reject(new Error('premature close'));
2645+
}
2646+
return Promise.race([
2647+
once(writable, 'drain'),
2648+
once(writable, 'close')
2649+
.then(() => Promise.reject(new Error('premature close')))
2650+
]);
2651+
}
2652+
26422653
async function pump(iterable, writable) {
26432654
for await (const chunk of iterable) {
26442655
// Handle backpressure on write().
26452656
if (!writable.write(chunk)) {
2646-
if (writable.destroyed) return;
2647-
await once(writable, 'drain');
2657+
await drain(writable);
26482658
}
26492659
}
26502660
writable.end();

0 commit comments

Comments
 (0)