首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Google助手从Firebase返回数组数据

使用Google助手从Firebase返回数组数据
EN

Stack Overflow用户
提问于 2018-08-29 03:15:16
回答 1查看 97关注 0票数 1

我的防火墙数据库的结构如下:水果:苹果,5根香蕉,6

我想把苹果和香蕉放在一个数组中,这样当我命令谷歌助理时,它就会给我5岁的苹果和6岁的香蕉。我的代码如下所示:

代码语言:javascript
复制
 function handleCommand(agent) {
    return admin.database().ref('Fruits').child().once("value").then((snapshot) =>{
        var i;
        var fruitlist=[];

        //puts each snapshot child of 'Fruit' in an array
        snapshot.forEach(function(item) {
            var itemVal = item.val();
            fruitlist.push(itemVal);
        });

        //outputs command in google assistant
        for (i=0; i < fruitlist.length; i++) {
            agent.add(fruitlist[i]);
        }   

    })

默认响应为“不可用”。

我在执行日志中得到了以下内容:

Firebase.child失败。被称为零薪酬。预计至少有1人。

我不知道在Firebase.child中放哪个论点。如果我希望所有的水果被谷歌助理“说”。下面是我的消防基地结构的图片。

该错误如下所示:

我现在要做的只是输出水果,在代码中手动输入每个子程序,然后删除返回语句中的".child“:

这给了我下面的输出,这也是我想要看到的,但是使用数组作为我现在使用的解决方案是非常硬编码的:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 12:39:31

正如错误消息所暗示的那样,正如您推测的那样,child()调用需要一个参数--特别是要从子节点获取信息的名称。但是,因为您想要“果树”节点的所有子节点,所以根本不需要指定它。child()调用只是在层次结构中向下导航,但如果不想导航,则根本不需要导航。

返回的快照将具有整个对象的值。在某些情况下,这可能是相当大的,所以它不是一个好主意,得到它的全部。在你的例子中,它是相当小的,所以没什么大不了的。

在JavaScript方面,您现在可以将该值作为一个具有属性和值的对象处理。但是,您的原始代码并没有完全按照您的要求执行--您得到的是值,但是忽略了名称(即属性名或键)。您可以通过多种方式迭代对象的属性,但是我喜欢获取对象的键,遍历它,获取与键相关的值,然后使用它“做一些事情”。

虽然我还没有测试代码,但它可能如下所示:

代码语言:javascript
复制
 function handleCommand(agent) {
    return admin.database().ref('Fruits').once("value").then((snapshot) =>{
        // Get an object with all the fruits and values
        var fruits = snapshot.val();

        // Get the keys for the attributes of this object as an array
        var keys = Object.keys( fruits );

        // Iterate over the keys, get the associated value, and do something with it
        for( var i=0; i<keys.length; i++ ){
          var key = keys[i];
          var val = fruits[key];
          agent.add( `The number of ${key} you have are: ${val}` );
        }

    })

虽然这是(或应该是)运行Firebase和JavaScript,但谷歌方面的操作存在一些问题。

首先,返回的消息可能有一些语法问题,因此使用您的示例,您可能会看到一条消息,如“您拥有的Apple的数量是: 1”。有解决这个问题的方法,但请记住,我的示例代码只是一个初始示例。

然而,更重要的是,使用字符串调用agent.add()创建了一个"SimpleResponse“。在一个操作中,每个回复只允许两个简单的响应。因此,虽然这对你的例子是有效的,但如果你有更多的成果,它会有问题。您可以通过将字符串连接在一起来解决这个问题,因此您只需要调用agent.add()一次。

最后,您可能希望实际查看不同曲面的一些其他响应选项。所以,当你在扬声器上读出这个列表时,你可以在一个带有屏幕的设备上读取一个更短的列表,并显示一个包含这些信息的表格。然而,有关这些问题的细节可能最好作为一个新的StackOverflow问题来解决。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52068961

复制
相关文章

相似问题

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