Created
June 22, 2023 16:27
-
-
Save astuyve/3ca6e3b76284d921dcaa7212819780f4 to your computer and use it in GitHub Desktop.
Out of order response from Node.js response streaming - provided by Doug Moscrop and Ampt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const MAX_LINES = 30000 | |
export const handler = awslambda.streamifyResponse(async (_event, responseStream, _context) => { | |
await new Promise((resolve, _reject) => { | |
let i = 1 | |
responseStream.on('error', (err) => { | |
console.error('error:', err) | |
_reject(err) | |
}) | |
responseStream.on('close', () => { | |
console.log('closed') | |
}) | |
responseStream.on('finish', () => { | |
console.log('finished') | |
resolve() | |
}) | |
write() | |
function write() { | |
let ok = true | |
do { | |
if (i === MAX_LINES) { | |
responseStream.end(`This is line ${i}\n`) | |
} else { | |
ok = responseStream.write(`This is line ${i}\n`) | |
} | |
i++ | |
} while (i <= MAX_LINES && ok) | |
if (i <= MAX_LINES) { | |
console.log('buffer full - waiting for drain') | |
responseStream.once('drain', write) | |
} | |
} | |
}) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment