【发布时间】:2021-12-28 12:57:02
【问题描述】:
我在使用我正在使用的转换函数时遇到了一些困难。由于我的 Mongodb 文档在转换完成之前保存,最终数组为空,其中应包括我的 URL(在回调中验证)。一切正常,但我的问题是我在 apiInstance.convertDocumentPptxToPng 完成之前重定向并保存文档。
try {
const params = {
Bucket: 'bucket',
Key: req.file.key
}
await s3.getObject(params, async function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
const inputFile = await Buffer.from(data.Body)
apiInstance.convertDocumentPptxToPng(inputFile, callback)
}
await course.save()
res.redirect('/course/admin')
})} catch(err) {
console.log(err)
}
【问题讨论】:
-
apiInstance.convertDocumentPptxToPng是异步方法吗?如果是这样,那么您应该await它,就像您在该代码中使用所有其他异步方法一样。 -
如果我等待这个,我从 aws superagent 收到一个错误:警告:超级代理请求已发送两次,因为 .end() 和 .then() 都被调用了。如果你使用 Promise,永远不要调用 .end() 警告:.end() 被调用了两次。 superagent superagent 不支持此功能:双重回调错误
-
好的。该消息似乎来自代码的不同部分,或者来自从该代码调用的函数内部。我假设它给了你一个行号和文件名?
-
是的,它来自回调。但我不知道为什么。如果我运行此代码,文档会被转换,并且 imageurl 会正确返回并推送到课程对象。但是 await course.save() 和 res.redirect 调用得太快了。
-
是的。所以正如我所说,要么将它包装在一个承诺中,要么只是将保存和重定向调用移动到回调的末尾。
标签: javascript node.js express amazon-s3