首页 > 解决方案 > 在 Lambda 节点 for 循环中使用 Promise

问题描述

我正在尝试使用记录预加载 DynamoDB 表。我有大约 1500 条记录要做。我尝试了各种方法来循环仅 5 个,但每次只输入一个。这是我到目前为止所拥有的。

'use strict';

var AWS = require('aws-sdk'), documentClient = new AWS.DynamoDB.DocumentClient();
var params = {};

exports.handler = function(event, ctx, callback) {
    Promise.all(
        event.map(e => {
            var params = {
                Item: {
                   UID: ctx.awsRequestId,
                   AccountName: e.accountname,
                   AccountStatus: e.accountstatus,
                   MainNumber: e.mainnumber,
                   FaxNumber: e.faxnumber,
                   EmergencyNumber: e.emergencynumber,
                   EPAPERNO: e.epaperno,
                   BGB: e.bgb,
                   WebID: e.webid,
                   BoxProgram: e.boxprogram,
                   ReportGroup: e.reportgroup,
                   CreditLimit: e.creditlimit,
                   Customer: e.customer,
                   Transporter: e.transporter,
                   TSDF: e.tsdf,
                   Permit: e.permit,
                   Created: e.created,
                   Author: e.author,
                   Modified: e.modified,
                   Editor: e.editor
            },
                TableName: 'Accounts'
            };
            documentClient.put(params, function (err, data){
               if(err){
                   console.log(err);
               }else{
                   console.log(params);
               }
           });
        })
    ).then(console.log("Done"));
};

任何帮助,将不胜感激。

标签: node.jsaws-lambdapromiseamazon-dynamodb

解决方案


你试过这个:

'use strict';

var AWS = require('aws-sdk'), documentClient = new AWS.DynamoDB.DocumentClient();

exports.handler = async(event, ctx) => {
    return Promise.all(
        event.map(e => {
            var params = {
                Item: {
                   UID: ctx.awsRequestId,
                   AccountName: e.accountname,
                   AccountStatus: e.accountstatus,
                   MainNumber: e.mainnumber,
                   FaxNumber: e.faxnumber,
                   EmergencyNumber: e.emergencynumber,
                   EPAPERNO: e.epaperno,
                   BGB: e.bgb,
                   WebID: e.webid,
                   BoxProgram: e.boxprogram,
                   ReportGroup: e.reportgroup,
                   CreditLimit: e.creditlimit,
                   Customer: e.customer,
                   Transporter: e.transporter,
                   TSDF: e.tsdf,
                   Permit: e.permit,
                   Created: e.created,
                   Author: e.author,
                   Modified: e.modified,
                   Editor: e.editor
                },
                TableName: 'Accounts'
            };
            documentClient.put(params).promise().then(data=>{
                console.log(params);
            })
        })
    ).then(()=>{
        console.log("Done")
    }).catch(e=>{
        console.log(e)
    })
};

如果您发现问题,请告诉我,我没有尝试过

另一个想法是使用 [BatchWriteItem][1] 来增加 put 过程,每批最多 25 个


推荐阅读