Проблема с определением области действия навыка alexa в DyanmoDB get function

#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. О, хорошо, спасибо. Как бы вы тогда решили это?