gpt4 book ai didi

node.js - 发送流作为 axios 请求的响应

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:11 24 4
gpt4 key购买 nike

我正在向服务器发出 .xlsx 文件的请求,服务器正在使用 puppeteer 生成 PDF,我想将流以数组形式发送回客户端以下载它们,但响应没有等待他们,在前面我得到一个空数组。

Node.js/Reactjs

router.post('/generate-payslip', async (req, res) => {
const data = JSON.parse(req.body)
let responsePDF = []

data.map(async data => {
responsePDF.push(await generatePayslipPDF(data))
const payslips = await Payslip.findOne({ date: data.Date, name: data.Name })
if (payslips) {
} else {
let payslip = new Payslip({
date: data.Date,
name: data.Name,
data: data
})
payslip = await payslip.save()
}

})

res.send(responsePDF)
})

最佳答案

您需要等待data映射完成。

您调用data.map返回一个新的 Promise 数组,您可以使用 Promise.all 等待它。

const promises = data.map(async data => {
// ...
})

// wait for all the promises to resolve
await Promise.all(promises)

res.send(responsePDF)

但请注意,这会“并行”运行 map 。无法保证 PDF 会按顺序推送到 responsePDF 数组。

为了保证顺序,可以在map函数中返回生成的PDF:

const responsePDF = await Promise.all(data.map(async data => {
// ...
return await generatePayslipPDF(data)
}))

res.send(responsePDF)

或者,您可以使用 for...of 循环来串行运行它(一次一个)。这样您就不需要使用 Promise.all

for (const payslip of data) {
responsePDF.push(await generatePayslipPDF(payslip))
// ...
}


res.send(responsePDF)

关于node.js - 发送流作为 axios 请求的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60504901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com