4

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

我昨天花了一整天的时间,自从我今天早上醒来以来一直在修补它,但没有成功。

如果有人可以深入了解我在这里做错了什么,我将不胜感激。提前感谢大家!

最后说明:Lambda 函数本身的超时设置为 5 分钟。所以我认为 Lambda 函数不会在数据库查询返回之前超时。当我运行该功能时,它会在片刻后退出。

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
4

3 回答 3

6

我遇到过类似的问题。我在下面的语句中删除了 async 以解决:

exports.handler = async (event,context) 
于 2018-09-01T18:58:34.153 回答
2

我认为发生了什么是 Lambda 调用该函数,但它不会等待回调,因此它认为它已完成并退出。

我想我遇到了类似的问题,并通过使用 Bluebird 和 async/await 解决了它。

如果您需要,我可以提供我的代码片段

于 2017-12-22T12:02:20.990 回答
0

你加载了SDK吗?我在您的代码段中看不到它

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'REGION'});

编辑:包括区域

于 2017-12-04T13:55:59.647 回答