Python 为什么Firebase事件在第二次和后续事件中返回空对象?

Python 为什么Firebase事件在第二次和后续事件中返回空对象?,python,events,firebase-realtime-database,Python,Events,Firebase Realtime Database,我在服务器上有一个Python Firebase SDK,它可以写入Firebase实时数据库 我在浏览器上有一个Javascript Firebase客户端,它将自己注册为“child_added”事件的侦听器 身份验证由Python服务器处理 如果Firebase规则允许读取,客户端侦听器将获取第一个事件的数据(该FB位置的所有数据),但只有一个键包含后续添加的子事件的空数据 以下是侦听器注册: firebaseRef.on ( "child_added",

我在服务器上有一个Python Firebase SDK,它可以写入Firebase实时数据库

我在浏览器上有一个Javascript Firebase客户端,它将自己注册为“child_added”事件的侦听器

身份验证由Python服务器处理

如果Firebase规则允许读取,客户端侦听器将获取第一个事件的数据(该FB位置的所有数据),但只有一个键包含后续添加的子事件的空数据

以下是侦听器注册:

firebaseRef.on
    (
      "child_added",
      function(snapshot, prevChildKey)
      {
        console.log("FIREBASE REF: ", firebaseRef);
        console.log("FIREBASE KEY: ", snapshot.key);
        console.log("FIREBASE VALUE: ", snapshot.val());
      }
    );
“REF”总是好的

“钥匙”总是好的

但是,在首次完全检索该数据库位置后,“VALUE”为空

我尝试在listen函数中每次重新实例化firebase引用。同样的结果

我尝试了一个“值”事件而不是“child_added”。没有改善

Firebase侧的数据在FB控制台中看起来非常完美

以下是Python管理员将数据写入firebase的方式:

def push_value(rootAddr, childAddr, data):
  try:
    ref = db.reference(rootAddr)
    posts_ref = ref.child(childAddr)
    new_post_ref = posts_ref.push()
    new_post_ref.set(data)
  except Exception:
    raise
正如我所说的,这可以完美地将数据放在FB中的正确位置


为什么在第一次下载数据库之后,在后续事件中使用空事件对象?

我找到了答案。和大多数事情一样,结果很简单,但花了几天时间才找到。也许这会拯救其他人

在“文档”页面上:

在JavaScript和Python中,调用push()然后 立即调用set()非常常见,Firebase SDK允许您 通过将要设置的数据直接传递给push(),将它们组合为 下面是……”

我建议措辞应该强调你必须这样做

同一页面上前面的Python示例不起作用:

new_post_ref = posts_ref.push()
new_post_ref.set({
    'author': 'gracehop',
    'title': 'Announcing COBOL, a New Programming Language'
})
在本例中,单独的空push()后跟set(data)对于Python和Javascript不起作用,因为在这些情况下,push()隐式地执行set(),因此空push会使用空数据触发不需要的事件侦听器,而set(data)也不会使用数据触发事件

换言之,问题中的代码:

new_post_ref = posts_ref.push()
new_post_ref.set(data)
必须是:

new_post_ref = posts_ref.push(data)
未显式调用set()

由于此push()代码仅在新对象写入FB时发生,因此对客户端的初始下载不受影响


尽管文档可能试图传达设计的演变,但它没有指出只有最后给出的Python和Javascript示例可以工作,其他示例不应该使用。

这对我来说似乎是个bug,.push不应该使用空参数调用set(),这与他们的整个设计/文档背道而驰