- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个应用程序,我想在其中加载一些初始数据(使用 Firebase.once('value')
完成),然后在稍后的某个时候我想接收事件已添加到该 Firebase 引用的子节点的数量。
为此,我想使用 Firebase.on('child_added')
,但根据定义(并在实践中看到),它首先加载该 Firebase 引用中的所有数据.
有没有办法绕过这种行为,只监听 child_added
事件。此外,像转储初始数据集这样的变通方法并不是解决方案(想象一个包含超过一百万个数据点的数据集 - 我不想每个数据点都只是为了在添加一个数据点时监听!)。
编辑:Firebase.on('child_added')
可以与 limit()
结合使用以限制来自初始请求的数据量。对于我的应用程序,可能在某个时间点只会将一个数据点添加到 Firebase,因此我使用了 Firebase.limit(1).on('child_added')
来限制加载到单个数据点的初始数据。但是,我不喜欢这种解决方法,原因有二:
limit(1)
限制应用程序接收所有加了 child ?我不确定是否是这种情况,或者是否会为添加的每个单独的 child 调用 child_added
,无论它们是否作为批处理添加。似乎提供一个 true/false
标志作为调用的参数是一个不错的解决方案,但我会等着看是否有我一直在掩盖的答案。 .
最佳答案
删除旧消息
如果您对历史数据不感兴趣,那么您可以将其用作消息队列。如果是这种情况,那么旧记录在读取后应该被删除(或存档到备用路径)。这样,问题就 self 解决了。
如果你想维护这个模型,有几个不错的选择:
存储最后一次读取的 key 并将其用作下一次加载的起点
您甚至可以将 key 存储在 Firebase 中
var fb = new Firebase(URL);
fb.child('last_read_key').once('value', function(lastReadSnap) {
var lastKey = lastReadSnap.val();
var pri = lastReadSnap.getPriority();
fb.child('data_to_read').startAt(pri, lastKey).on('child_added', function(snap) {
if( snap.name() !== lastKey ) {
console.log('new record', snap.name());
fb.child('last_read_key').setWithPriority(snap.name(), snap.getPriority());
}
});
});
使用优先级标记旧记录的时间戳
写入记录时,使用setWithPriority:
fb.child('records/$recordid').setWithPriority(data, Firebase.ServerValue.TIMESTAMP);
现在您可以阅读从“现在”开始的记录:
fb.child('records').startAt(Date.now()).on('child_added', function(snap) {
console.log('new child', snap.name());
});
请注意此处使用时间戳的一个注意事项。我在 startAt() 命令中使用了 Date.now(),因为它目前不支持 Firebase.ServerValue.TIMESTAMP(为此提交了错误)。
关于javascript - Firebase child_added 没有先加载所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24312783/
运行这两个代码应该有什么区别吗? ref.on('child_added',function(child,prev){ console.log(child.key+prev); } ref.off(
我有相当大的数据集,可能有数百万个对象,我需要触发 child_added 事件并获取最后添加的子项。但是,每当我启动服务时,它都会为数据集中的每个初始子项触发一次事件。 如何避免这种行为? 编辑:
来自 Firebase API: Child Added: This event will be triggered once for each initial child at this locat
我正在使用 Firebase 开发 HTML5 移动消息传递应用程序。我遇到了一个我无法解决的问题。该应用程序有多个 channel (聊天室)。当一条消息第一次添加到一个 channel 时,它按预
我的应用现在可以运行了,但我不确定它为什么运行... 我有一些类似的代码: var itemRef; listRef.on('child_added', function(childSnapshot,
我有一个大型数据集(约 10 万个条目),正在使用“child_added”事件进行订阅。使用 Node 7 和 firebase 3.6.1,这样做似乎会在触发单个 child_added 事件之前
我创建了这个处理程序来监视正在创建的新子项。这个小技巧阻止 child_added 事件在每次页面加载时触发我的代码。相反,它只会在实际添加内容时触发。 // Listen for new roo
我正在将 Firebase 和 Node 与 Redux 一起使用。我正在从一个键加载所有对象,如下所示。 firebaseDb.child('invites').on('child_added',
我必须从 Firebase 读取大量数据(约 3000 个子项和约 1.5 MB),如果我可以向用户显示下载的内容,那就太好了。因此,我决定使用 child_added 来显示它们中的每一个,但它并没
首先,我不确定是否存在真正的问题,但我想我会分享我的推理。 我使用 Firebase 作为数据库/后端,用于归档来自家里各种传感器的所有数据,并在托管中使用带有炫酷图形的 UI。因此,每 10 分钟我
我有一个 post 列表,我正在使用 .on('child_add') 获取它们,问题是我只想获取 post 是在添加项目时发布的,而不是在删除项目时发布的,但是,似乎 .on('child_adde
我有一个指向 privateMessages 的引用,如下所示: messagesRef: firebase.database().ref("privateMessages") 下面是 /privat
我想在推送时从 firebase 数据库获取最近添加的子节点,但根本不是数据库的最后一个子节点。 问题是典型的 child_added 事件无论如何都会获取最后一个子元素,即使是在第一次加载页面时也是
我有一个案例需要获取所有 event 对象。每个 event 对象都有一个属性 city_id,它是与所有 cities 列表中的单个 city 对象的关系键>. ... |- events | |
对于我的 Firebase 云功能,我正在尝试添加最后一个子项目,以便继续执行该项目的任务。我的结构是这样的: -Tips -TipsId -Safe
我正在使用 Angular2、ionic2 和 firebase 开发聊天应用程序。为了获得聊天,我尝试了以下方法 Controller 代码: displayAllMessage() { l
我有一个网站,用户可以通过选择菜单中的项目来下订单。 它的设置是为了让您按下菜单页面上的“下订单”按钮 http://www.waipahe.co.uk/takeaway/menu.html 然后已下
我有一个应用程序,我想在其中加载一些初始数据(使用 Firebase.once('value') 完成),然后在稍后的某个时候我想接收事件已添加到该 Firebase 引用的子节点的数量。 为此,我想
我在同一条路径上有 2 个“限制”查询。我首先加载“limit(1)”,然后加载“limit(50)”。 当我加载第二个查询时, child_ added 事件不会按顺序触发。相反,列表中的最后一项(
当用户“激活”其帐户后,尝试向用户显示所有用户数据(包括当前用户)时,我遇到了此问题。当监听列表中某个项目的 onValue 更改,然后在回调中监听该列表的 child_added 事件时,原始“监视
我是一名优秀的程序员,十分优秀!