Получение ответа до завершения транзакции firebase

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

#node.js #firebase #firebase-база данных в реальном времени #обратный вызов #диалоговые потоки

Вопрос:

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

 function retrieveContact(agent) {
  var query = admin.database().ref("/contacts").orderByKey();
  query.once("value")
    .then(function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            var key = childSnapshot.key;
            var childName = childSnapshot.child('name').val();
            if (agent.parameters.name == childName) {

                console.log('find '   childName);
                agent.add('The email address for '   childName   ' is '   childSnapshot.child('email').val());

            }
            // console.log('testMode' childName);
        }); //// .then 
    }); //// .once } 
  

Итак, как я могу дождаться ответа, а затем позволить агенту показать результат?
Как я могу включить концепцию promise в свой код?

Ответ №1:

Вы не показываете всю свою функцию обработчика, но если вы выполняете асинхронные операции (например, чтение из firebase db), вы должны вернуть обещание. Так диспетчер обработчика узнает, что нужно дождаться выполнения обещания, прежде чем возвращать ответ пользователю.

В вашем случае это, вероятно, так же просто, как

 return query.once("value")
  // etc