【发布时间】:2021-05-03 23:54:11
【问题描述】:
所以我有一个将多个存储桶作为参数的 lambda,我想遍历每个存储桶并将所有条目推送到一个数组中。
我知道 s3.listObjectsV2 是一个异步函数,所以我在它前面添加了一个等待,但由于某种原因,代码仍然是控制台首先记录 allData,然后运行 listObjects 函数。
我不明白为什么异步等待不等待 listobjects 先完成然后继续到 console.log(allData)
代码如下:
const AWS = require('aws-sdk')
const S3 = new AWS.S3();
exports.listObjects = function(params) {
return new Promise(async(resolve, reject) => {
var allData=[]
for (const param of params){
await S3.listObjectsV2(param, (err, data) => {
if (err) return reject(err)
allData.push(data)
//resolve(data)
})
}
console.log(allData)
})
}
【问题讨论】:
-
(err, data) => {是一个回调,尝试allData.push(await S3.listObjectsV2(param).promise()),不要忘记包含在 try/catch 中
标签: node.js amazon-web-services amazon-s3 aws-lambda async-await