【问题标题】:Getting response before firebase transaction done在firebase事务完成之前获得响应
【发布时间】:2019-08-21 03:52:50
【问题描述】:

当有匹配显示时,我正在尝试检索所有孩子。 我在控制台中打印该值,几秒钟后我的代码在那里运行良好,但是当我在代理中将其打印为消息时,它在响应之前显示不可用,因为它不等待。 这是我的代码:

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 } 

所以,我如何等待我的回复然后让代理显示结果? 如何在我的代码中包含承诺概念?

【问题讨论】:

    标签: node.js firebase firebase-realtime-database callback dialogflow-es


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 2020-02-16
      • 2017-09-30
      • 1970-01-01
      相关资源
      最近更新 更多