Firebase 中的记录总数(我啥时候完成计数?)

Posted

技术标签:

【中文标题】Firebase 中的记录总数(我啥时候完成计数?)【英文标题】:Total number of records in Firebase (when am I done counting?)Firebase 中的记录总数(我什么时候完成计数?) 【发布时间】:2012-07-23 18:10:00 【问题描述】:

在表格中计算记录显然是一项手动工作,直到你们获得一些已经在工作中的漂亮新功能;)

但是,即使使用 .on('value', ...) 手动运行来获取计数,我也会坚持下去:

var table = new Firebase('http://beta.firebase.com/user/tablename');
var count = 0;
table.on('child_added', function(snapshot) 
   count++;
   // how do I know if this is the last child? i.e. the count is complete?
);

// when is it okay to use count?

我预见到任何类型的分页都会出现同样的问题,但我觉得我对此有点呆滞。我错过了什么?

对于获取用户队列中的消息数量来说,这从根本上说是错误的模式吗?

【问题讨论】:

试试这个使用javascript对象计数,它工作。 ***.com/questions/5223/length-of-a-javascript-object 【参考方案1】:

child_added 事件没有“完成”的概念,因为随着时间的推移可以继续添加孩子。如果您想现在获取孩子的计数,可以使用“值”从该位置获取当前快照,然后计算孩子的数量。例如:

table.once('value', function(snapshot) 
  var count = 0;
  snapshot.forEach(function(childSnapshot) 
    count++;
  );
  // do something with count.
);

或者,如果您希望计数不断更新,您可以使用 .on() 而不是上面的 .once()。但这在性能方面并不理想,因为您每次都要数所有的孩子。幸运的是,您可以结合使用 'child_added' 和 'value' 来有效地保持计数:

var count = 0;
table.on('child_added', function(snapshot) 
  count++;
  // how do I know if this is the last child? i.e. the count is complete?
);

table.on('value', function(snapshot) 
  // do something with count.
);

这是有效的,因为“值”将在“初始”数据完成后触发一次,然后在数据更改时再次触发,因此您将获得不断更新的正确计数。虽然如果您希望孩子被移除,您也需要处理 child_removed。

【讨论】:

对,由于某种原因,在我们讨论了在父表上调用 value 所涉及的开销之后,我忘记了获取快照和使用 forEach。我的大脑听到了什么:“从内存中删除 value/forEach”:(看到了吗?我知道这很明显。 哈哈。好吧,很高兴现在有意义。 :-)【参考方案2】:

使用“child_added”无法知道您何时收到“最后一个”项目。如果您要计算在特定时间点存在的所有孩子,我建议使用“值”事件,如下所示:

var table = new Firebase('http://beta.firebase.com/user/tablename');

table.on('value', function(snapshot) 
   var count = 0;
   snapshot.forEach(function() 
       count++;
   );
   //count is now safe to use.
);

【讨论】:

是的,被愚弄了。我使用forEach 打折了,因为它需要在父级上调用value,这在大桌子上可能是一个很大的开销。在某个地方,我完全滑倒了。 :)【参考方案3】:

在 FB 实现 count 作为返回函数之前,我想不让客户端循环遍历任何返回记录的最佳方法是通过 REST 方式获取它。

参考:What’s the best RESTful method to return total number of items in an object?

【讨论】:

以上是关于Firebase 中的记录总数(我啥时候完成计数?)的主要内容,如果未能解决你的问题,请参考以下文章

Quorum Vs Versioning,我啥时候应该使用啥?

我啥时候需要在 Heroku 中使用工作进程

Firebase 总用户数

kendo ui grid 完成服务器端分页和设置总数

我啥时候使用保存!,创建!和更新属性!在 Rails 中?

CoreData - 我啥时候保存?