从Firebase读取数据并使用Node Js在聊天中显示

时间:2019-01-01 10:36:30

标签: firebase firebase-realtime-database dialogflow

我是Firebase实时数据库和Google Dialogflow的新手。我仔细阅读了文档并继续进行。我正在从数据库中读取数据,我想在聊天中显示它。我可以在日志中看到数据,但无法在聊天对话中显示。如果我查看日志,则可以看到成功或失败的结果,但无法在聊天对话中查看。

这是下面的代码:

var childData = "";    
var message = '';    
var query = '';
var key = '';

function wheretogo(agent) {    
    //taking country name as input from user    
    var country = request.body.queryResult.parameters.country;    
    //reference country from the database    
    query = admin.database().ref("country").orderByKey();    
    query.once("value")    
        .then(function(snapshot) {    
            snapshot.forEach(function(childSnapshot) {    
                key = childSnapshot.key;    
                childData = childSnapshot.val();    
                //matching the input from user and the country name(key) from database    
                if (country === key) {    
                    console.log("sucess");    
                    message = 'Thats nice ! You are travelling to ' + key;    
                    agent.add(message);    
                }
                 else 
                 {
                   console.log("failed");
                 }    
                });
             });
           }

我希望输出结果“很好!您正在我的聊天对话中以国名前往'。

1 个答案:

答案 0 :(得分:0)

问题在于,如果您执行任何异步调用,则Dialogflow库希望您返回Promise。由于您正在进行异步调用(query.once()调用),因此必须返回Promise。否则,处理程序调度程序将不等待来自数据库的答复,然后再尝试向用户发送答复。

您不会显示所有代码,但就您而言,它看起来相当简单。由于query.once()返回了Promise,因此您可以返回此Promise。像这样的变化

 return query.once("value") 

可能只需要这些。