Aws lambda lambda对DynamoDB的调用停止,甚至不是错误

Aws lambda lambda对DynamoDB的调用停止,甚至不是错误,aws-lambda,amazon-dynamodb,Aws Lambda,Amazon Dynamodb,我在测试一些代码。在本地,它是有效的。当我把它放进lambda时,它就死定了 index.js const AWS=require(“AWS sdk”); const MyHandler=require(“./handler.js”); //在lambda外部初始化DynamoDB客户端以重新使用 if(docClient的类型===‘未定义’){ var docClient=new AWS.DynamoDB.DocumentClient({region:“eu-west-1”}) } expo

我在测试一些代码。在本地,它是有效的。当我把它放进lambda时,它就死定了

index.js
const AWS=require(“AWS sdk”);
const MyHandler=require(“./handler.js”);
//在lambda外部初始化DynamoDB客户端以重新使用
if(docClient的类型===‘未定义’){
var docClient=new AWS.DynamoDB.DocumentClient({region:“eu-west-1”})
}
exports.handler=async(事件、上下文、回调)=>{
context.dynamoDbClient=docClient;
等待MyHandler.processEvent(事件,上下文);
}
handler.js
processEvent=(事件,上下文)=>{
控制台日志(“收到消息”);
变量参数={
TableName:“TestTable”,
项目:{“测试”:“测试”}
};
console.log(“插入dynamoDB”);
试一试{
返回context.dynamoDbClient.put(参数,(错误,数据)=>{
如果(错误){
log(“错误:无法插入DynamoDB:+错误”);
}否则{
console.log(“插入dynamoDB”);
}
});
}捕捉(错误){
日志(“插入dynamoDB时出错:+e”);
}
};

在AWS日志中,收到
消息后
我只得到一个
结束请求ID:…
您正在使用
等待
同步函数
处理事件
-这将立即解决;不要等

一旦处理程序返回,Lambda将“杀死”未解决的承诺,或者在您的情况下是回调。无论您在本地测试什么,都可能无法做到这一点,因此尽管处理程序函数已返回,但回调将在该环境中执行(推测)

你的问题是,你把回电和承诺混为一谈。AWS SDK为几乎所有调用公开了一个承诺选项,因此我建议使用该选项,而不是编写自己的:

processEvent=(事件,上下文)=>{
变量参数={
TableName:“TestTable”,
项目:{“测试”:“测试”}
};
返回context.dynamoDbClient.put(params.promise())
};

我取出所有async/await并处理从processEvent返回的承诺。成功了,谢谢。