【问题标题】:Can't understand why my async await isn't working in my lambda function不明白为什么我的异步等待在我的 lambda 函数中不起作用
【发布时间】: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


【解决方案1】:

您的 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;
}

【讨论】:

    猜你喜欢
    • 2013-05-14
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多