Skip to content

Instantly share code, notes, and snippets.

@astuyve
Created June 22, 2023 16:27
Show Gist options
  • Save astuyve/3ca6e3b76284d921dcaa7212819780f4 to your computer and use it in GitHub Desktop.
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
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