首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Dialogflow Fulfillment从Firebase获取数据

如何使用Dialogflow Fulfillment从Firebase获取数据
EN

Stack Overflow用户
提问于 2018-10-22 20:14:02
回答 1查看 677关注 0票数 0

我目前正在开发一个常见问题聊天机器人。

根据用户的参数,一些答案是特定的,所以我决定使用Webhook,这样我就可以从我的firebase数据库中获取响应。

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

下面是我的代码:

代码语言:javascript
复制
    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函数,但无法获取数据。

在我的日志中,我注意到数据总是在“超时”消息出现几秒钟后打印出来。

EN

回答 1

Stack Overflow用户

发布于 2018-10-22 20:48:51

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

将超时移至ref测试的失败情况。

代码语言:javascript
复制
refTest.on("value", function(snapshot)
{
  console.log(snapshot.val());
  resolve(snapshot.val());
});

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

然后你就可以捕捉到错误了。

代码语言:javascript
复制
result.then(function(response)
{
  agent.add(response);
}).catch(() => {
  agent.add("Timeout !")
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52929110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档