当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 如何从AWS DynamoDB中的函数返回查询结果 – JS lambda

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一个让我疯狂的愚蠢问题.我有一个AWS lambda函数,它可以调用Dynamo db. 我希望将ddb.Scan操作放入函数中获取结果,然后将其传递给事件,但我无法在函数内返回结果… var aws = require('aws-
我有一个让我疯狂的愚蠢问题.我有一个AWS lambda函数,它可以调用Dynamo db.

我希望将ddb.Scan操作放入函数中获取结果,然后将其传递给事件,但我无法在函数内返回结果…

var aws = require('aws-sdk');
var ddb = new aws.DynamoDB();

function getName(userid) {

 ddb.scan({
        TableName: "Users",
        ScanFilter: {
            "userid":
                    {
                        "AttributeValueList": [
                            {"S": userid}
                        ],
                        "ComparisonOperator": "EQ"
                    }
        }
    }, function (err, data) {
        return data.Items[0].username;
    });

};

exports.handler = function (event, context) {

        var userid= '4vwe6jd56es59q';

        var username = getName(userid);

        context.succeed({success: true, username: username}); 


};

有人可以帮我理解我迷路的地方吗?

注意你如何在这里声明一个函数:

function getName(userid) {

还有另一个功能:

function (err, data) {

这是你试图返回某个东西的第二个函数,但没有任何东西期望该函数返回任何东西,所以返回值被抛弃了.

请注意,对ddb.scan()的调用会立即返回,并且在检索到DynamoDB响应之后,稍后将调用传递给ddb.scan()的匿名回调函数.这是一个基本的异步编程概念,在成功编写NodeJS代码之前,您必须了解这一概念.您需要将回调传递给getName函数,一旦它具有名称值就可以调用,或者您可能需要重新考虑完全设计Lambda函数的方式.

我还建议使用AWS Lambda上提供的最新版本的NodeJS,以便您可以使用promises而不是回调,这使得使用异步函数更容易一些.

网友评论