带有DynamoDb的AWS Lambda没有结果

时间:2018-09-03 07:31:44

标签: amazon-web-services aws-lambda amazon-dynamodb documentclient

我只是从AWS开始,根本无法运行DynamoDB

我遵循了一个教程,并创建了所有AWS元素,并在DynamoDB基本配置文件中为lambda设置了权限。

我想知道为什么我没有从DB或任何错误消息中得到任何结果。 我在代码中放入了一些控制台日志以进行故障排除:

var AWS = require("aws-sdk");
AWS.config.update({
    region: "eu-west-1",
});

var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
    TableName: "cooking_table",
    Key:{
        "data_type": "meal"
    }
};


console.log("Scanning table.");
docClient.scan(params, onScan);
console.log("scan done");

function onScan(err, data) {
    console.log("starting to scan");
    if (err) {
        console.error("Unable to scan the table. Error JSON:", 
 JSON.stringify(err, null, 2));
    } else {
        // print all the movies
        console.log("Scan succeeded.");
        data.Items.forEach(function(movie) {
           console.log(movie.data_type);
        });

        // continue scanning if we have more movies, because
        // scan can retrieve a maximum of 1MB of data
        if (typeof data.LastEvaluatedKey != "undefined") {
             console.log("Scanning for more...");
             params.ExclusiveStartKey = data.LastEvaluatedKey;
             docClient.scan(params, onScan);
        }
    }
}

令人惊讶的是,我没有在功能onScan中获得任何控制台日志条目。

在日志中,我仅看到这些行的输出:

console.log("Scanning table.");
console.log("scan done");

但没有错误。

我看不到我正在做的大错误。

出了什么问题?谢谢。

2 个答案:

答案 0 :(得分:0)

“密钥”不是有效的扫描参数。不能完全确定您的数据是什么样,但是也许您想要:

var params = {
    TableName: "cooking_table",
    FilterExpression: "data_type = meal"
};

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property

此外,如另一个答案所述,您想要执行以下操作以实际调用扫描调用,该扫描调用返回一个请求对象:

docClient.scan(params, onScan).send((err, data) => 
{
    console.log("scan actually done for real");
});

答案 1 :(得分:0)

扫描是异步操作,完成后会调用回调,因此您的问题是您的lambda在该操作完成之前就已结束,这可能就是为什么您只看到这2条日志而没有任何错误/问题或结果的原因。

我建议考虑使用Promise作为该问题的可能解决方案。