node.js - Node js Json 添加数组

标签 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 }]

我该怎么办?

最佳答案

这对于 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 订阅事件因为我们只对初始值感兴趣。如果您想以某种方式对数据集的变化使用react,您可以使用 on 代替。
  2. 我们正在使用forEach获取快照值,而不是 val因为我们关心商品订单。 forEach 保证将按 orderBy 查询指定的顺序使用所有快照键调用回调。另一方面,val 会返回一个键顺序不可靠的对象。
  3. 一旦回调返回 true,
  4. forEach 就会停止,但我们不希望发生这种情况。不返回任何内容不会取消枚举,但最好是明确的,以防有人决定简洁并删除大括号。

关于node.js - Node js Json 添加数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194648/

相关文章:

node.js - pg(postgresql) 无法在使用 pg 库的 Node js 中工作

Firebase 云函数调用了两次

javascript - 在 Ember.js 应用程序中实现 Firebase simpleLogin 电子邮件和密码

javascript - 是否可以查询 !equalTo : null on Firebase?

node.js - 如何使用 Node.js 在 Redis 中使用 zscan?

node.js - 同时 Mongo 插入是否有限制

node.js - Angular 错误 : Node Sass version 6. 0.0 与 ^4.0.0 不兼容。 Angular

ios - Firebase:在注销之前保存数据

android - Firebase 多个子监听器

ios - Firebase iOS SDK `setValue` 完成调用不一致