2017-08-03 77 views
0

我有一個運行在Node.js 4.3中的Lambda函數。函數的輸入參數是一個String,它是從AWS Lex機器人發送的。來自DynamoDB的映射的值在Node.js中未定義

我想從DynamoDB表中獲取項目。在這個項目中,我有一個Map-type屬性,它包含一個String鍵和一個String值。我想使用在函數開始時作爲參數獲取的關鍵字String從該映射中獲取值。

問題是,當我將地圖記錄到控制檯時,我看到的全部是{}

這是我的代碼:

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

dynamodb.getItem()異步執行,由於這個原因,它有一個回調函數。

console.log(名稱)在對dynamodb調用返回任何值之前執行。

在getItem函數內部添加一個console.log(),你會發現這是真的。

谷歌「異步JavaScript」,你會發現一些好的指針。

相關問題