Javascript 从Firebase数据库中删除子项后获取新列表

Javascript 从Firebase数据库中删除子项后获取新列表,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,child\u removed的文档说明传递到回调的DataSnapshot将是已删除的子级的旧数据 我通过在代码的另一部分中调用push来填充我的数据库。在这里,我想在删除数据库顶部的子项后访问数据库顶部的下一个值。这就是我试图做的,但它不起作用 var ref = firebase.database().ref("Windsor boyss").limitToFirst(1); ref.on("child_removed", function(

child\u removed
的文档说明传递到回调的
DataSnapshot
将是已删除的子级的旧数据

我通过在代码的另一部分中调用
push
来填充我的数据库。在这里,我想在删除数据库顶部的子项后访问数据库顶部的下一个值。这就是我试图做的,但它不起作用

var ref = firebase.database().ref("Windsor boyss").limitToFirst(1);
    ref.on("child_removed", function(snapshot) {
        ref.once("value", function(snapshot) {
            snapshot.forEach(function(childSnapshot) {
                console.log("Child is ", childSnapshot.val);
            });
        });
    }); 
例如,当删除用户名为javedh的子项时,应触发EventListener,并打印
child is tjaved
,因为删除顶部的子项后,该值位于数据库顶部


有人能帮我想出一个有效的解决办法吗?谢谢

正如Doug所评论的,在同一引用上使用嵌套侦听器是非常不寻常的

在(“值”上使用
的惯用方法,类似于:

var ref = firebase.database().ref("Windsor boyss").limitToFirst(1);
ref.on("value", function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
        console.log("Child is ", childSnapshot.val);
    });
}); 

更新:我认为问题可能来自这样一个事实:快照的本地(内存中)缓存正在为您的
ref.once(“值”
)提供服务,因为此时不包含任何数据

我可以通过创建一个新查询来解决这个问题,以便在回调中侦听,而不是侦听同一个查询(您称之为
ref
):

关于全工作试验台,请参见:


请注意,在
val()之后缺少
()
在循环中,但这不是问题的原因。

我不清楚你想做什么。请编辑问题以更详细地解释。如果你用实际数据进行说明会有帮助。@DougStevenson我当时已经做了。你能看一下,看看现在是否清楚吗?我想你只需要使用一个普通的列表r on
ref
以了解查询结果何时更改。即使添加了子节点,也会触发普通侦听器。我希望仅在删除子节点时才会触发它。“值”当添加一个孩子时,监听器也会被触发。我只希望监听器在删除位于顶部的前一个孩子后,在顶部显示下一个孩子。它不会打印任何内容。我认为我能够重现问题,并解决它。请参阅我的答案和链接jsbin中的代码。非常感谢你,弗兰克。我将给出我的答案不要尝试!嘿,弗兰克。我对你的答案投了更高的票,但Stackoverflow说:“谢谢你的反馈!那些声誉低于15的人所投的票会被记录下来,但不会改变公开显示的帖子分数。”
var ref = firebase.database().ref("Windsor boyss");
var query = ref.limitToFirst(1);
query.on("child_removed", function(snapshot) {
  console.log("Child "+snapshot.val()+" was removed");
  ref.limitToFirst(1).once("value", function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      console.log("First child is "+childSnapshot.val());
    });
  });
});