Amazon dynamodb 从AWS Lambda调用DynamoDB对象上的getItem(),为什么';我的回调不能执行吗?
我正在尝试从我的DynamoDB数据库中获取一个项目。按照目前编写代码的方式,我无法从DynamoDB检索任何数据。我一定是做错了什么,因为从我的测试中可以看出,我的回调没有被调用 我昨天花了一整天的时间在这上面,从今天早上醒来就一直在修修补补,但没有成功 如果有人能提供我在这里做错了什么的见解,我将非常感激。提前感谢大家 最后注意:Lambda函数本身的超时设置为5分钟。因此,我认为Lambda函数不会在db查询返回之前超时。当我运行该函数时,它会在片刻后退出Amazon dynamodb 从AWS Lambda调用DynamoDB对象上的getItem(),为什么';我的回调不能执行吗?,amazon-dynamodb,aws-lambda,aws-sdk-nodejs,Amazon Dynamodb,Aws Lambda,Aws Sdk Nodejs,我正在尝试从我的DynamoDB数据库中获取一个项目。按照目前编写代码的方式,我无法从DynamoDB检索任何数据。我一定是做错了什么,因为从我的测试中可以看出,我的回调没有被调用 我昨天花了一整天的时间在这上面,从今天早上醒来就一直在修修补补,但没有成功 如果有人能提供我在这里做错了什么的见解,我将非常感激。提前感谢大家 最后注意:Lambda函数本身的超时设置为5分钟。因此,我认为Lambda函数不会在db查询返回之前超时。当我运行该函数时,它会在片刻后退出 const AWS = requ
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();
var response = null;
var test = false;
function getFromDB(callback) {
const params = {
TableName: process.env['DB_TABLE_NAME'] // evaluates to 'test-table',
Key: {
"id": {
S: postId // evaluates to a big string, pulling it in from an SNS message. Verified it with console.log(). It stores the expected value.
}
}
};
dynamodb.getItem(params, function(err, data) {
if (err) callback(data, true); // an error occurred
else callback(data, true); // successful response
});
}
getFromDB((data, isCalled) => {
response = data;
test = isCalled;
});
console.log(data); // evaluates to null
console.log(test); // evaluates to false
你加载SDK了吗?我在你的代码片段中看不到它
// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'REGION'});
编辑:Included region我认为发生的事情是Lambda调用函数,但它不会等待回调,因此它认为已经完成并退出 我想我也遇到了类似的问题,通过使用Bluebird和async/await解决了这个问题 如果您需要,我可以提供我的代码片段我曾经遇到过类似的问题。 我在下面的语句中删除了async以解决:
exports.handler = async (event,context)
是的,SDK已经加载。我将编辑我的原始帖子以反映这一点。我没有包括
AWS.config.update({region:'region'})代码>语句。你认为这会导致我的问题吗?有可能。迪纳摩需要一个区域,我认为它不会默认任何东西。但是如果没有堆栈跟踪,就很难知道您的问题可能是什么。如果您需要有关地区的更多信息,请告诉我。谢谢。我将尝试一下,看看它是否解决了这个问题。我更新了代码以包含该区域,但仍然不起作用。您检查了日志了吗?在AWS控制台中,单击lambda函数,然后单击监视选项卡,然后单击“在Cloudwatch中查看”。最上面的一项是您的最新执行日志。另外,您的处理程序设置为什么?您的处理程序函数可以选择将回调作为参数,但我认为您必须获取事件和上下文。像这个“函数(事件、上下文、回调)”一样,感谢您继续关注这个问题。今天下班后我会检查我的日志,看看这是否有帮助;