Amazon dynamodb 从AWS Lambda调用DynamoDB对象上的getItem(),为什么';我的回调不能执行吗?

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

我正在尝试从我的DynamoDB数据库中获取一个项目。按照目前编写代码的方式,我无法从DynamoDB检索任何数据。我一定是做错了什么,因为从我的测试中可以看出,我的回调没有被调用

我昨天花了一整天的时间在这上面,从今天早上醒来就一直在修修补补,但没有成功

如果有人能提供我在这里做错了什么的见解,我将非常感激。提前感谢大家

最后注意:Lambda函数本身的超时设置为5分钟。因此,我认为Lambda函数不会在db查询返回之前超时。当我运行该函数时,它会在片刻后退出

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中查看”。最上面的一项是您的最新执行日志。另外,您的处理程序设置为什么?您的处理程序函数可以选择将回调作为参数,但我认为您必须获取事件和上下文。像这个“函数(事件、上下文、回调)”一样,感谢您继续关注这个问题。今天下班后我会检查我的日志,看看这是否有帮助;