簡體   English   中英

如何使用Firebase中的Dialogflow實現來獲取數據

[英]How to fetch data using Dialogflow Fulfillment from Firebase

我目前正在使用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功能,但仍無法獲取數據。
在我的日志中,我注意到數據總是在“超時”消息后幾秒鍾打印出來。

因為它是異步的,所以它將始終打印超時。

將超時移至參考測試失敗的情況。

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 !")
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM