【发布时间】:2019-12-16 15:15:45
【问题描述】:
我正在尝试将文件上传到我的 S3 存储桶,然后退出我的上传功能。问题是我在上传返回存储的数据之前退出了函数。
我尝试将async/await 与s3.upload 一起使用,但我不相信s3.upload 是一个承诺,因此它不会做任何事情。
例如:
for (const file of files) {
const params = {
Bucket: BUCKET_NAME,
Key: file.name,
Body: file.data
};
const stored = await s3.upload(params, (err, data) => {
if (err) console.log("error", err, err.stack);
return console.log(data);
});
console.log(stored);
}
console.log("leave loop")
我尝试使用带有async.each 和async.eachSeries 的异步实用程序模块,如in this stack answer 引用,如下所示:
const saveFile = async file => {
const params = {
Bucket: BUCKET_NAME,
Key: file.name,
Body: file.data
};
s3.upload(params, (err, data) => {
if (err) console.log("error", err, err.stack);
console.log(data);
});
};
await async.eachSeries(files, saveFile, err => {
if (err) console.log(err);
});
console.log("leave loop")
但它仍然过早地点击“离开”。我误解了一些东西,但我不确定是什么。
更新:
s3.upload 返回一个 managedUpload 对象 - 这似乎是 await 提前触发的原因。当managedUpload 解决/完成时触发回调。
那么有没有办法await 完成的对象而不是managedUpload?
【问题讨论】:
标签: node.js asynchronous amazon-s3 async-await aws-sdk