我尝试使用nodejs lambda函数将图像上传到AWS s3存储桶。但是对于初始呼叫,没有文件被上传,而在下一次尝试时,先前的文件被上传。
即使我们在异步等待中使用它,它也不能像同步一样工作。
async uploadAttachment(attachment, id) {
try {
let res = '';
attachment.forEach(async (element, index) => {
const encodedImage = element.base64;
const fileTypeInfo = element.fileextType;
const fileName = `${Math.floor(new Date() / 1000)}_${index + 1}.${fileTypeInfo}`;
const decodedImage = Buffer.from(encodedImage, 'base64');
const filePath = `${id}/${fileName}`;
const params = {
Body: decodedImage,
Bucket: process.env.S3_FRF_BUCKET,
Key: filePath
};
res = await s3.upload(params, () => {});
});
return res;
} catch (e) {
throw e;
}
}
有什么建议吗?
答案 0 :(得分:1)
.forEach
不能与async / await一起使用,就像人们期望的那样。请改用for..of
。
for(let element of attachment) {
// await actually waits here
}
答案 1 :(得分:1)
您需要像之前建议的for
循环以及在s3.upload中添加promise
await s3.upload(params, () => {}).promise();