javascript - DynamoDB 中的 map 值在 Node.js 中未定义

标签 javascript node.js dictionary amazon-dynamodb aws-lambda

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

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

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

这是我的代码:

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 行。此行仅记录 {}。最终消息的内容是未定义

我可以做什么来解决这个问题?

最佳答案

dynamodb.getItem() 正在异步执行,因此它有一个回调函数。

console.log(names) 在调用 dynamodb 返回任何值之前执行。

在 getItem 函数中添加一个 console.log() ,您将看到这是真的。

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

关于javascript - DynamoDB 中的 map 值在 Node.js 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45482950/

相关文章:

python - 按数值对字典(文本键)进行排序

javascript - 为什么关闭窗口时componentWillUnmount不触发?

javascript - 文本对齐 : center not working on dynamic inline-block <h1> tag

javascript - 如何使用 Angular JS 更新表中的值

javascript - socket.io:客户端发出回调永远不会触发

node.js - 为什么 Nestjs 不在我的浏览器中设置 cookie?

javascript - if 语句中的正则表达式验证

javascript - 使用 onMouseover JavaScript/HTML 显示文本

python - 如何在字典列表中找到公共(public)键的最小/最大值?

Python 字典 : the size affects timing?