#javascript #node.js #koa #koa2
#javascript #node.js #koa #koa2
Вопрос:
Я хочу вернуть сгенерированный файл с помощью koa (2), и после того, как клиент закончил получать файл, файл должен быть удален.
// this function is called by Koa
async myMethod (ctx) {
const file = await something()// generate a file
ctx.attachment(path.basename(file))
ctx.body = fs.createReadStream(file)
// how can I await here for the client to fully receive file?
await fs.promises.unlink(file)
}
Я мог бы сделать это:
ctx.body.on('end', async () => {
console.log('client finished receiving')
await fs.promises.unlink(file)
})
но я бы предпочел поместить логику удаления в отдельное промежуточное программное обеспечение,
и поэтому мне нужно дождаться полной отправки файла, прежде чем возвращаться из функции
Комментарии:
1. Может быть, что-то вроде
await new Promise(resolve => { ctx.body.on('end', resolve) })
?2. @ChrisG Я уже пробовал это, но почему-то обещание никогда не разрешается таким образом и зависает навсегда. Только когда я также регистрирую eventlistener для ‘data’ в обещании, оно разрешается, но тогда файл-данные не попадают в ctx.body.