所以我有一个 lambda 将多个存储桶作为参数,我想遍历每个存储桶并将所有条目推送到一个数组中。
我知道 s3.listObjectsV2 是一个异步函数,所以我在它前面添加了一个 await 但由于某种原因,代码仍然先控制台记录 allData,然后运行 listObjects 函数。
我不明白为什么 async await 不等待 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)
})
}
您的 lambda 处理程序本身应该是异步的,然后就可以了:
const AWS = require('aws-sdk');
const S3 = new AWS.S3();
exports.listObjects = async function(params) {
const allData = [];
for(const param of params) {
const result = await S3.listObjectsV2(param).promise();
console.log(result);
allData.push(result);
}
return allData;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句