Функция базы данных Firebase не работает должным образом на DialogFlow - PullRequest
0 голосов
/ 12 апреля 2019

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

    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 Ответ

1 голос
/ 12 апреля 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...