Друзья, я бился головой о стол. Я пишу строку действий / событий Alexa + Lambda + Dynamodb. Проблема возникает в моем Lambda Node.JS. У меня есть функция getChores, в которой я пытаюсь запустить простой getItem (), чтобы вытащить только образец записи в Dynamodb, однако я могу получить доступ ТОЛЬКО к данным, возвращаемым в операторе Else, но мне нужно передать их через обратный вызов в SpeechOutput. Мы будем очень благодарны за любую помощь, которую вы можете оказать!
function getChores(callback) {
sessionAttributes = {};
var params = {
TableName: 'Chores',
Key: {
'chore': {
S: 'Clean up toys'
},
}
};
// Call DynamoDB to read the item from the table
var results = ddb.getItem(params, function(err, data) {
if (err) {
console.info("Error", err);
} else {
//CAN ONLY ACCESS HERE!
console.info("Success", data.Item);
speechOutput = data.Item.chore.S;
console.info(data.Item.chore.S);
console.info(speechOutput);
}
});
console.info(results);
//Get card title from data
const cardTitle = "Chore"
//Get output from data
//const speechOutput = element.chore;
// If the user either does not reply to the welcome message or says something that is not
// understood, they will be prompted again with this text.
const repromptText = '';
const shouldEndSession = false;
callback(sessionAttributes,
buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, что ddb.getItem - это асинхронный метод. Вам нужно вызвать метод обратного вызова callback внутри блока else.