col*_*ars 17 asynchronous amazon-s3 node.js async-await aws-sdk
我正在尝试将文件上传到我的 S3 存储桶,然后返回我的上传功能。问题是我在上传返回存储的数据之前返回了函数。
我试图使用async/awaitwith 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")
Run Code Online (Sandbox Code Playgroud)
我尝试使用 Async 实用程序模块,async.each并在此堆栈答案中async.eachSeries引用,如下所示:
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")
Run Code Online (Sandbox Code Playgroud)
但它仍然过早地“离开”。我误解了一些东西,但我不确定是什么。
更新:
s3.upload返回一个managedUpload对象 - 这似乎是 await 提前触发的原因。当managedUpload解决/完成时触发回调。
那么有没有办法await完成对象而不是managedUpload?
ant*_*nku 38
你应该尝试调用的承诺()上ManagedUpload,以得到一个承诺,并等待其分辨率:
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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9753 次 |
| 最近记录: |