DyanmoDB получить функцию Алекса умение решать вопросы - PullRequest
0 голосов
/ 14 марта 2019

У меня проблема с областью видимости с функцией DynamoDB, которую я использую в своем коде Alexa (я довольно новичок в NodeJS в целом) Следующий код - мой обработчик запуска, и у меня есть переменная с именем x внутри моегообработчик.Я пытаюсь установить x для данных, которые я получаю из DynamoDB, и использовать их вне функции get, чтобы Alexa могла их произносить (как вы видите в ответе).Оператор в моей функции get не меняет значение x вне самой функции get.Другими словами, x вне моей функции get кажется отдельным от переменной x внутри get.Я знаю, что х внутри функции 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 Ответ

0 голосов
/ 15 марта 2019

Я не думаю, что это проблема масштаба. Я думаю, что поскольку метод DBClient.get () является асинхронным, оператор return выполняется до выполнения обратного вызова внутри метода DBCLient.get ().

...