代码之家  ›  专栏  ›  技术社区  ›  Ido Naveh

Node.js中未定义DynamoDB的映射值

  •  0
  • Ido Naveh  · 技术社区  · 9 年前

    我有一个Lambda函数,它在Node中运行。js 4.3。函数的输入参数是一个字符串,它是从AWS Lex bot发送的。

    我想从DynamoDB表中获取一个项目。在这个项目中,我有一个映射类型属性,它包含一个字符串键和字符串值。我想使用我在函数开始时得到的键字符串作为参数,从该映射中获取一个值。

    问题是,当我将地图记录到控制台时,我看到的只是 {}

    var AWS = require('aws-sdk');  
    AWS.config.region = 'us-east-1';
    var dynamodb = new AWS.DynamoDB();
    
    const sessionAttributes = intentRequest.sessionAttributes;
    const slots = intentRequest.currentIntent.slots;
    const name = slots.names;
    
    var id = null;
    if (name == "a") {
        id = "00";
    } else if (name == "b") {
        id = "01";
    }
    
    var params = {
        TableName: 'names',
        Key: {
            'id' : {S: 'test-id'}
        }
    };
    
    var names = {};
    
    dynamodb.getItem(params, function(err, data) {
        if (err) {
            console.log(err); // an error occurred
        } else {
            names = data.Item.names.M;
        }
    });
    
    console.log(names);
    
    var content = names[id];
    
    callback(close(sessionAttributes, 'Fulfilled',
    {'contentType': 'PlainText', 'content': content}));
    

    正如你所见,有一个 console.log 代码末尾的行。这行只记录 {} undefined .

    我能做些什么来解决这个问题?

    1 回复  |  直到 9 年前
        1
  •  1
  •   user602525    9 年前

    发电机B。getItem()正在执行 异步

    安慰日志(名称)在调用dynamodb时返回任何值之前执行。

    添加控制台。在getItem函数中使用log(),您将看到这是真的。

    谷歌“异步javascript”,你会发现一些很好的指针。