Node.js Can';我不明白为什么我的异步等待是';t在我的lambda函数中工作
所以我有一个lambda,它将多个bucket作为一个参数,我希望循环遍历每个bucket并将所有条目推送到一个数组中 我知道s3.listObjectsV2是一个异步函数,所以我在它前面添加了一个wait,但出于某种原因,代码仍然是控制台先记录所有数据,然后运行listObjects函数 我不明白为什么async await没有先等待listobjects完成,然后再转到console.log(allData) 代码如下:Node.js Can';我不明白为什么我的异步等待是';t在我的lambda函数中工作,node.js,amazon-web-services,amazon-s3,aws-lambda,async-await,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,Async Await,所以我有一个lambda,它将多个bucket作为一个参数,我希望循环遍历每个bucket并将所有条目推送到一个数组中 我知道s3.listObjectsV2是一个异步函数,所以我在它前面添加了一个wait,但出于某种原因,代码仍然是控制台先记录所有数据,然后运行listObjects函数 我不明白为什么async await没有先等待listobjects完成,然后再转到console.log(allData) 代码如下: const AWS = require('aws-sdk') cons
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;
}
(err,data)=>{
是一个回调,请尝试allData.push(等待S3.listObjectsV2(param.promise())
,不要忘记使用try/catchCheers!Developer5595-如果下面的答案对您有效,您介意接受吗?