Функция базы данных Firebase не работает должным образом в DialogFlow

#javascript #node.js #firebase-realtime-database #dialogflow-es

#javascript #node.js #firebase-realtime-database #dialogflow-es

Вопрос:

Я пишу код для чат-бота, и у меня возникла проблема с запросом к базе данных в моей firebase DB, которую я не знаю, как исправить, потому что это то же самое, что и в других примерах, которые я нашел.

     var ref = admin.database().ref();
    var consultasRef = ref.child('consultas')

    agent.add('Test 2')

    consultasRef.on("value", function(snap){
        agent.add('Test 3')
        agent.add(snap.val());
    });
  

Как сказано, функция, которая должна печатать snap.(val) . Он запускается не так, как должен. Правильный синтаксис такой же, как и тот, который я использую. «Тест 2» печатается, в отличие от «Теста 3», который находится внутри функции

Для тех, кто не знаком с Dialogflow, agent.add() это то же console.log() самое, что и в JS, но для Dialogflow.

Ответ №1:

Когда вы выполняете асинхронный вызов (например, вызов базы данных), вы должны вернуть обещание из вашего обработчика намерений, чтобы он знал, когда вызов завершен, чтобы он мог отправить результат обратно боту.

Кроме того, вы, вероятно, захотите использовать эту once() функцию, поскольку вас не волнует обновление базы данных (поскольку результат уже будет отправлен).

Вероятно, вы можете сделать оба из них с кодом, выглядящим примерно так:

 return consultasRef.once('value')
  .then( snap => {
    agent.add('Test 3');
    agent.add(snap.val());
  });
  

Также могут возникнуть проблемы с добавлением более одного или двух текстовых ответов, в зависимости от используемой вами интеграции.