node.js - 在 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"));
};
任何帮助,将不胜感激。
解决方案
你试过这个:
'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 个
推荐阅读
- azure-devops - 报告:Azure DevOps Pipelines
- postgresql - PostgreSQL 从日期变量中提取年份
- iframe - 如何在 keycloak 的 iframe 中打开管理帐户页面
- java - 在 Java 中创建监听器
- javascript - 使用 Context API 时访问全局状态
- django-cms - 如何从 DjangoCMS 菜单中排除未发布的页面?
- java - 无法自动接线。找不到“AuthenticationProvider”类型的 bean
- javascript - 根据数组中的值将数据从一个数组添加到另一个数组的最佳方法是什么?
- java - 如何在Java中根据开始和结束文本分割文本
- java - PMD 问题为空指针异常