【发布时间】:2018-05-13 18:42:02
【问题描述】:
我想在推送时从 firebase 数据库中获取最近添加的子节点,但根本不是数据库的最后一个子节点。
问题是典型的child_added 事件无论如何都会得到最后一个孩子,即使是在第一次加载页面时也是如此。
即使此时没有添加新节点,此代码也会输出最后一个子节点。
firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) {
console.log(snapshot.val());
});
这个“hack”现在对我有用,但是如何以适当的方式重写它?
firebase.database().ref().on('child_changed', function() { // listen only when there are some changes in entire db, the key solution for this purpose.
firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) {
console.log(snapshot.val());
});
});
那么,如果此时没有添加新节点,为什么只有 child_added 监听器起作用?
【问题讨论】:
-
这是根据documentation 的预期行为“此事件将在此位置的每个初始子项触发一次,并且每次新的添加了孩子...”
-
那么,我的“hack”是合法的吗? :)
-
不,这个“黑客”被窃听了:(
-
我真的不建议这样做。
firebase.database().ref().on()将下载整个数据库,这对客户端来说将是数据密集型的。也许使用'value'而不是'child_added'并使用布尔值来跟踪它第一次被触发并忽略这次?我看看能不能想点别的。 -
@JenPerson 在这种情况下 OP 正在使用
on('child_changed,因此不会下载整个数据库。
标签: javascript firebase firebase-realtime-database