当我开始侦听onDataChange()
事件时,处理程序会收到一个值。此值是先前在本地保存的值。然后它立即再次调用处理程序并在云上检索正确的更新值。
文档说:
您可以使用该函数读取给定路径中内容的静态快照,因为它们在事件发生时存在。连接侦听器时会触发此方法,每次包括子项在内的数据发生更改时,都会触发此方法。
我读了"因为他们在活动时存在", 不是因为它在事件发生时就存在了。
我希望方法在添加检索实时值时触发一次,而不是在本地保存,然后在每次更改值时触发。
如何重现:
通过以下方式加载现有对象:
onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world"
终止应用并通过Firebase控制台将值更改为" Hello Hello World";
通过以下方式再次加载对象:
onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world"
等待,然后使用值立即再次调用处理程序:" Hello Hello World"
我不知道这是一个错误还是设计错误。
如果这是默认行为并且是设计的,有没有办法让我知道该值是否是上次保存的本地值?
答案 0 :(得分:1)
当您侦听持久高速缓存中存在的值时,Firebase客户端将立即触发具有该本地值的事件。然后它将与服务器同步。如果这导致更新的值,客户端将触发第二个值事件。
目前无法知道事件是来自服务器还是来自本地缓存。最好是设计代码以满足所有情况。