Следующий код - мой обработчик запуска в моем умении Alexa, и у меня есть переменная с именем x внутри моего обработчика.Я пытаюсь установить x для данных, которые я получаю из DynamoDB, и использовать их вне функции get (я получил функцию из https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.03.html#GettingStarted.NodeJs.03.02), чтобы Alexa могла произносить значение (строку) x (как вы видите в возврате). Оператор в моей функции «get» не меняет значение x вне самой функции get. Я знаю, что x внутри функции get фактически изменяется, потому что я записываю его вконсоль. Таким образом, я опубликовал аналогичную публикацию по этому вопросу, и сначала я подумал, что это проблема с областью видимости, но оказалось, что это потому, что функция get является асинхронной. Следовательно, я добавил ключевые слова async и await, как показано ниже. Я новичок вNodeJS, так что я решил поместить их в соответствии с тем, что я исследовал. Однако это все еще не работает.
const LaunchHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === `LaunchRequest`;
},
async handle(handlerInput) {
var x;
//DYNAMO GET FUNCTION
await DBClient.get(params, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
x = data.Item.Answer;
} });
return handlerInput.responseBuilder
.speak(x)
.withShouldEndSession(false)
.getResponse();
},
};
В качестве примечания, вот JSON, который я (успешно)возвращение из базы данных:
{
"Item": {
"Answer": "Sunny weather",
"Question": "What is the weather like today"
}
}