Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果节点被删除,则Firebase查询不推送数据,然后添加回_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 如果节点被删除,则Firebase查询不推送数据,然后添加回

Javascript 如果节点被删除,则Firebase查询不推送数据,然后添加回,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我最初有以下数据: "holidays": { ... "2016-12-19": { "stegosaurus": true }, "2016-12-20": { "lambeosaurus": true, "stegosaurus": true }, "2016-12-21": { "lambeosaurus": true }, ... } 带着以下疑问 ref.order

我最初有以下数据:

 "holidays": {
    ...
    "2016-12-19": {
      "stegosaurus": true
    },
    "2016-12-20": {
      "lambeosaurus": true,
      "stegosaurus": true
    },
    "2016-12-21": {
      "lambeosaurus": true
    },
    ...
  }
带着以下疑问

ref.orderByKey().startAt("2016-12-18")
                 .endAt("2016-12-18")
                 .on("child_added", function(snapshot) {
                    console.log("child_added")
                 });
ref.orderByKey().startAt("2016-12-18")
                 .endAt("2016-12-18")
                 .on("child_removed", function(snapshot) {
                    console.log("child_removed")
                 });
 ref.orderByKey().startAt("2016-12-18")
                 .endAt("2016-12-18")
                 .on("child_changed", function(snapshot) {
                    console.log("child_changed")
                 });
 ref.orderByKey().startAt("2016-12-18")
                 .endAt("2016-12-18")
                 .on("child_moved", function(snapshot) {
                    console.log("child_moved")
                 });
在首次向“假日”节点添加新节点“2016-12-18”时,我得到了一个添加的
child\u
事件。当节点“2016-12-18”被删除时,我会收到一个
子节点被删除的事件。但当我再加上“2016-12-18”时,这次我没有收到任何事件。这是一个firebase bug吗

以下是重复此问题的jsbin:

复制:

1) On reload, Click Update button 
2) Dino info is displayed
3) Click Delete button
4) Dino info is removed
5) Click Update button
6) Dino info is not displayed anymore
7) Reload/refresh browser
8) Dino info is displayed
9) Click Delete button
10) Repeat step (1)

请注意,在步骤(1)中,有时不显示恐龙信息。这似乎取决于连接的客户端数量。

使用深度更新重新添加以前在同一会话中删除的节点时,确实存在错误。它在Firebase数据库服务器中隐藏了相当长的一段时间,可以使用以下代码片段进行复制:

var query = ref.orderByKey().startAt("2017-01-13").endAt("2017-01-13");
// attaching this listener makes it work
//ref.on("value", function(s) { console.log("value", s.val() )});
query.on("child_added", function(snapshot) { console.log("child_added"); });
query.on("child_removed", function(snapshot) { console.log("child_removed"); });
query.on("child_changed", function(snapshot) { console.log("child_changed"); });
query.on("child_moved", function(snapshot) { console.log("child_moved"); });
function _update() {
  console.log("updating child");
  ref.update({'2017-01-13/-KaMFzShw40MkBtMypUg': true });
  // using this way of setting the value makes it work
  //ref.child('2017-01-13/-KaMFzShw40MkBtMypUg').set(true);
};
function _delete() {
  console.log("deleting child");
  ref.update({'2017-01-13/-KaMFzShw40MkBtMypUg': null});
};
完成jsbin:

您可以通过使用
set()
而不是使用update来直接更新较低级别的子级,或者通过将侦听器连接到位置(而不是查询)来解决此错误


修复后,我将在这里发布说明。

您共享的代码中没有一个实际添加数据,因此很难确定。但总的来说,Firebase SDK的这一部分已经相当稳定了一段时间。总是有可能有一个bug,在这种情况下,我希望看到一个bug。如果你能设置一个jsbin来重现问题,通常会有帮助吗?@FrankvanPuffelen我已经用一个jsbin更新了问题,以复制问题。谢谢你调查这件事。谢谢tje jsbin。它使用PolymerFire,而您最初的问题是基于裸露的Firebase JavaScript SDK。鉴于我不熟悉PolymerFire的内部工作原理(我真的应该了解更多,但今天不是这样的日子),你能用JavaScript SDK重现这个问题吗?@Frankvanpoffelen,谢谢。我已经用一个使用firebase sdk的快照更新了jsbin链接。对我来说,它似乎仍然被破坏。我已经为此编写了一些单元测试,并发现查询引用上的事件侦听器似乎只触发一次,除非非查询引用上也有相同键的侦听器。我会尽快提交一份bug报告。@cartant好极了!你能告诉我bug报告的最新进展吗?谢谢是的,有趣的是,它确实又停止工作了。顺便说一句:附加一个值侦听器可以使它按预期工作(请参阅更新的jsbin)。使用
set()
而不是深度
update()
调用也是如此。我也把它添加到了我的jsbin中。请注意,目前这两个问题似乎都可以解决,但它们可能会让您无法解决。我们确认这确实是Firebase数据库中的一个错误。谢谢你找到它,它在里面已经有一段时间了!修复后,我将在这里发布说明,同时使用我在之前的评论中提到的方法之一作为解决方法。