Получение ответа до завершения транзакции Firebase - PullRequest
1 голос
/ 30 марта 2019

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

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 } 

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

1 Ответ

1 голос
/ 30 марта 2019

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

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

return query.once("value")
  // etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...