我试图将文件上传到我的S3存储桶中,然后退出上传函数。问题是,在上传返回存储数据之前,我就从函数中退出了。
我尝试使用
例子:
我尝试使用
async/await
和s3.upload
,但我认为s3.upload
不是一个承诺(promise),所以它什么也没做。例子:
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实用程序模块与async.each
和async.eachSeries
,参考这个 stack 答案,如下所示:
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
?