Node js Json添加数组

时间:2018-05-05 22:41:57

标签: node.js firebase firebase-realtime-database

这是我的查询

var db = firebase.database();
var ref = db.ref('Users');
ref.on('child_added', function(snapshot){
   console.log(snapshot.val())
});

这是出局

    { callCount: 1,
      favoriteCount: 1,
      interest: [ 'dogs', 'cats', 'technology' ],
      tickCount: 1 }
    { callCount: 15,
      favoriteCount: 7,
      interest: [ 'Technology', 'Azure', 'Asp.NET MVC', 'JavaScript' ],
      tickCount: 3 }

我想添加一个数组并像这样显示

 [{ callCount: 1,
      favoriteCount: 1,
      interest: [ 'dogs', 'cats', 'technology' ],
      tickCount: 1 },
    { callCount: 15,
      favoriteCount: 7,
      interest: [ 'Technology', 'Azure', 'Asp.NET MVC', 'JavaScript' ],
      tickCount: 3 }]

我该怎么办?

1 个答案:

答案 0 :(得分:0)

child_added事件无法实现这一点,因为它从未提供任何有关到达数据集末尾的指示,并会在添加新项目时继续发出新项目。

相反,您应该订阅value,它将在开头和任何更改时发出完整树的快照。

由于您只需要获取一次值,所以这是您的工作方式:

const db = firebase.database();
const ref = db.ref('Users');

ref.once('value', snapshot => {
    const result = [];

    snapshot.forEach(item => {
        result.push(item.val());

        return false;
    });

    // Do something with the result
});

这里需要注意的一些事项:

  1. 我们使用once订阅活动,因为我们只对初始值感兴趣。如果您想以某种方式对数据集中的更改做出反应,则可以使用on代替。
  2. 我们使用forEach来获取快照值,而不是val,因为我们关心商品订单。 forEach保证将按照orderBy查询的指定顺序调用所有快照键的回调。另一方面,val会返回一个对象排序不可靠的对象。
  3. 一旦回调返回true,
  4. forEach就会停止,我们不希望这种情况发生。不返回任何内容都不会取消枚举,但如果有人决定简洁并删除大括号,最好是明确的。