#node.js #scope #amazon-dynamodb #alexa
#node.js #область действия #amazon -dynamodb #alexa
Вопрос:
У меня возникла проблема с определением области действия функции DynamoDB, которую я использую в своем коде Alexa (я довольно новичок в NodeJS в целом) Следующий код является моим обработчиком запуска, и внутри моего обработчика есть переменная с именем x. Я пытаюсь установить x в качестве данных, которые я получаю от DynamoDB, и использовать их вне функции get, чтобы Alexa могла их использовать (как вы видите в возврате). Инструкция в моей get-функции не изменяет значение x за пределами самой get-функции. Другими словами, x вне моей функции get кажется отдельным от переменной x внутри get. Я знаю, что x внутри функции get на самом деле изменяется, потому что я регистрирую его на консоли. В качестве альтернативы я попытался поместить оператор return внутри функции get (в блоке else), но это не сработало
const LaunchHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === `LaunchRequest`;
},
handle(handlerInput) {
let x = "";
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; //this is functioning properly, I am getting the data I want from the database, it is a string
} });
return handlerInput.responseBuilder
.speak(x)
.withShouldEndSession(false)
.getResponse();
},
};
Ответ №1:
Я не думаю, что это проблема области действия. Я думаю, что, поскольку метод DBClient.get() является асинхронным, оператор return выполняется до выполнения обратного вызова внутри метода DBCLient.get().
Комментарии:
1. О, хорошо, спасибо. Как бы вы тогда решили это?