Promise.all(promiseList) 不工作但 Promise.all(promiseList[0]) 是

Promise.all(promiseList) is not working but Promise.all(promiseList[0]) is

我正在使用 aws lambda 获取项目列表并将项目异步推送到 table 中。这里 promise.all(promiseList) 没有在 table 中添加数据,但是 promise.all(promiseList[0]) 确保我的第一个元素被推送到 table 中。我怎样才能让它等待所有人? 我的代码-

let promiseList = [];
    // await Promise.all(
    promiseList.push(
        event.Records.map(async record => {
                console.log(record.dynamodb.Keys.ServiceOrderId.S);
                console.log('Inside initiate payment');
        
                const paymentObject = {
                    paymentId: record.dynamodb.Keys.ServiceOrderId.S,
                    totalAmount: "1200"
                };
                console.log(paymentObject);
                
                const dynamoDBParams = {
                    TableName : TABLE_NAME,
                    Item : paymentObject
                };
                return await  DynamoDBClient.put(dynamoDBParams).promise();
            }
        )
    );
    return await  Promise.all(promiseList[0]);

我可以看到几个变化

  • 我们不需要await每一个put都完成,效率会很低,我们希望一次继续执行。
  • DynamoDBClient.put(dynamoDBParams).promise() 正在返回一个承诺,它可以被推入一个数组,而不是推入整个循环

这是完整的 Lambda 的样子:

const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });
let docClient = new AWS.DynamoDB.DocumentClient();

exports.handler = async function(event) {
  const table = 'test'
  
  var promiseArray = [];
  event.Records.map(record => {
    console.log('record', record);
      const promise = docClient.put({
        TableName: table,
        Item: {
          pk: record.pk,
          title: record.title,
        },
      }).promise();
      promiseArray.push(promise)
  })
  return Promise.all(promiseArray);
}