Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';我不明白为什么我的异步等待是';t在我的lambda函数中工作_Node.js_Amazon Web Services_Amazon S3_Aws Lambda_Async Await - Fatal编程技术网

Node.js Can';我不明白为什么我的异步等待是';t在我的lambda函数中工作

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

所以我有一个lambda,它将多个bucket作为一个参数,我希望循环遍历每个bucket并将所有条目推送到一个数组中

我知道s3.listObjectsV2是一个异步函数,所以我在它前面添加了一个wait,但出于某种原因,代码仍然是控制台先记录所有数据,然后运行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;
}

(err,data)=>{
是一个回调,请尝试
allData.push(等待S3.listObjectsV2(param.promise())
,不要忘记使用try/catchCheers!Developer5595-如果下面的答案对您有效,您介意接受吗?