如何使用Firebase中的Dialogflow实现来获取数据

时间:2018-10-22 12:14:02

标签: javascript node.js webhooks dialogflow fulfillment

我目前正在使用FAQ聊天机器人。
某些答案将取决于用户的参数,因此我决定使用Webhook,以便从firebase数据库获取响应。

经过一些研究,我注意到Dialogflow是异步工作的,我不得不使用Promise,但是我仍然无法使响应动态和同步。

这是我的代码:

    function fetch_data(param)
    {
        return function(agent)
        {
            console.log("Fetching informations ...");
            var result = database_call();

            result.then(function(response)
            {
                agent.add(response);
            });
            agent.add("Timeout !")
        };
    }

    function database_call()
    {
        return new Promise((resolve, reject) => {
            var ref = db.ref("test/");
            var refTest = ref.child('test');
            refTest.on("value", function(snapshot)
            {
                console.log(snapshot.val());
                resolve(snapshot.val());
            });
            agent.add("[TIMEOUT] Cannot fetch data !")
        });
    }

我总是收到消息:尽管有Promise功能,但仍无法获取数据。
在我的日志中,我注意到数据总是在“超时”消息后几秒钟打印出来。

1 个答案:

答案 0 :(得分:0)

因为它是异步的,所以它将始终显示超时。

将超时时间移至参考测试的失败情况。

refTest.on("value", function(snapshot)
{
  console.log(snapshot.val());
  resolve(snapshot.val());
});

refTest.on("error", function(snapshot)
{
  agent.add("[TIMEOUT] Cannot fetch data !")
  reject();
});

然后您可以捕获错误。

result.then(function(response)
{
  agent.add(response);
}).catch(() => {
  agent.add("Timeout !")
});