diff --git a/lib/internal/streams/readable.js b/lib/internal/streams/readable.js index 57aa71817e4fba..983a6f6e65ebe4 100644 --- a/lib/internal/streams/readable.js +++ b/lib/internal/streams/readable.js @@ -1380,6 +1380,7 @@ function streamToAsyncIterator(stream, options) { async function* createAsyncIterator(stream, options) { let callback = nop; + let isListening = false; function next(resolve) { if (this === stream) { @@ -1390,8 +1391,6 @@ async function* createAsyncIterator(stream, options) { } } - stream.on('readable', next); - let error; const cleanup = eos(stream, { writable: false }, (err) => { error = err ? aggregateTwoErrors(error, err) : null; @@ -1399,6 +1398,11 @@ async function* createAsyncIterator(stream, options) { callback = nop; }); + function setupReadable() { + isListening = true; + stream.on('readable', next); + } + try { while (true) { const chunk = stream.destroyed ? null : stream.read(); @@ -1409,6 +1413,9 @@ async function* createAsyncIterator(stream, options) { } else if (error === null) { return; } else { + if (!isListening) { + setupReadable(); + } await new Promise(next); } }