在firebase事务完成之前获得响应

问题描述 投票:1回答:1

我正在尝试检索所有的孩子然后在匹配显示时。我在控制台中打印了这个值,几秒后我的代码在那里工作得很好,但是当我在代理中打印它作为消息时它在响应之前显示不可用,因为它不等待。这是我的代码:

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概念?

node.js firebase firebase-realtime-database callback dialogflow
1个回答
1
投票

您没有显示整个Handler函数,但如果您正在执行异步操作(例如从firebase db中读取),则必须返回Promise。这是Handler Dispatcher在向用户返回响应之前等待Promise完成的方式。

在你的情况下,它可能很简单

return query.once("value")
  // etc
© www.soinside.com 2019 - 2024. All rights reserved.