Облачная функция DialogFlow Firebase с чтением базы данных asyn c - PullRequest
1 голос
/ 11 марта 2020

Я использую облачную функцию Firebase в качестве выполнения для моего действия DialogFlow Google Assistant, но мне нужно удалить данные из базы данных Firebase, прежде чем я уладю намерение. Вот фрагмент кода:

      var userDataRef = sessionDatabaseRef.child(sessionId);
      userDataRef.once("value").then(function(data) {
        console.log(data.val());
        handleIntentAndProcessResponse();
      }).catch(function(){
        console.log("No data yet for this session");
        handleIntentAndProcessResponse();
      });

Функция с именем handleIntentAndProcessResponse - это то, где намеренная логика c возвращает ответ, устанавливая conv.ask(new SimpleResponse(blah)). Когда я проверяю это, это терпит неудачу, и журнал Облачной функции дает мне эту ошибку:

Ошибка: не был установлен ответ. Используется ли это в асинхронном c вызове, который не был возвращен как обещание обработчику намерений?

Итак, как я могу обработать этот асинхронный c вызов в базе данных Firebase, чтобы он ждет ответа? Мне нужно использовать данные, которые он возвращает при обработке намерения.

1 Ответ

1 голос
/ 11 марта 2020

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

К счастью, вызовы userDataRef.once().then().catch() оценит Обещание, и вы можете просто вернуть это. Так что это должно быть хорошо

  return userDataRef.once("value").then(function(data) {
    console.log(data.val());
    handleIntentAndProcessResponse();
  }).catch(function(){
    console.log("No data yet for this session");
    handleIntentAndProcessResponse();
  });
...