[英]How to synchronously upload files to S3 using aws-sdk?
我正在尝试将文件上传到S3存储桶,然后退出上传功能。 问题是我在上载返回存储的数据之前要退出该函数。
我尝试将s3.upload
与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实用程序模块与async.each
和async.eachSeries
一起async.each
,如该堆栈答案中所引用的,如下所示:
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
?
您应该尝试在ManagedUpload
上调用promise()以获得承诺并等待其解决:
for (const file of files) {
const params = {
Bucket: BUCKET_NAME,
Key: file.name,
Body: file.data
};
try {
const stored = await s3.upload(params).promise()
console.log(stored);
} catch (err) {
console.log(err)
}
}
console.log("leave loop")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.