【问题标题】:Firebase Realtime Database Property Listener [closed]Firebase 实时数据库属性监听器 [关闭]
【发布时间】:2021-12-13 21:58:45
【问题描述】:

我有一些这样的数据:leaderboards/board/{board id}/{child properties}

我为板添加了一个侦听器,如下所示:

const boardRef = firebase.database().ref('leaderboards/board');
boardRef.on('child_added', (snapshot) => {
    // handle data
});

那部分工作正常。然后我想听一个板上的特定属性,看看它是否发生了变化。我确实想听听板上的所有孩子的变化,因为几个孩子可能会非常频繁地变化,我们不想处理那么多数据,除非需要(某个应用状态)。所以,我尝试了这个:

const endedRef = firebase.database().ref('leaderboards/board/123/ended');
endedRef.on('value', (snapshot) => {
    // handle data
});

但是,当我在 Firebase 中更新 'ended' 属性时,不会调用侦听器。它仅在我第一次添加侦听器时调用(因此它似乎已正确连接)但在属性更改时不会调用。解决这个问题的正确方法是什么?

这篇文章很相似,但由于我已经在该属性上尝试了一个“值”侦听器,因此似乎不是修复或不适用于我的数据:How to listen to a specific value change in Firebase?

感谢您的所有帮助!

【问题讨论】:

  • 您的代码看起来是正确的,根据我的经验,当ended123 属性发生变化时应该触发。如果在那种情况下会触发 snapshotended 属性的新值,而不是整个板的快照。这不是你看到的吗?如果是这样,您能否在回调中显示您在快照中获得的内容?
  • 我只在添加侦听器时获得快照,而不是在更改值时获得快照,这就是问题所在。但正如我所料,快照确实只是结束的属性:false
  • 嗯...我不知道为什么会这样。你能在 jsbin 或 stackblitz 这样的网站上设置问题的重现,以便我看一下吗?
  • 哈哈好吧,我很高兴你让我这样做......我无法在 jsbin 中重现,所以意识到这是我代码中其他地方的问题。 (事实证明,我在向量对象中添加了监听器,由于代码访问,对象的副本被破坏,这正在删除我的监听器。)它现在正在工作,感谢你帮助我到达那里! :)
  • 很高兴听到你找到了原因米兰达 ????这是我们经常要求minimal/isolated repro 的原因之一。 :)

标签: javascript firebase firebase-realtime-database


【解决方案1】:

这与我的代码库中的某些特定内容有关,导致我的监听器删除在添加后立即被触发。因此,如果您遇到类似问题,请检查您删除监听器的位置!

【讨论】:

  • 如果您自己找到了答案,请务必接受您的答案以获得一些声誉积分!
  • 是的,我正打算这样做,但显然我必须等一天。
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
相关资源
最近更新 更多