离线时如何使侦听器在Firebase中工作以进行多位置更新

沙漠鹰吉他

这可能是Firebase中的错误。childAdded监听器,如果我张贴到二级节点和较高的不被触发?

这是我的架构:

root: {
    company1: {
        05062017: {
           user1: { 
                 "1": { "a": "aa", "b": "bb", "c": "cc" }
                 "2": { "a": "aa", "b": "bb", "c": "cc" }
                 "3": { "a": "aa", "b": "bb", "c": "cc" }
                 "4": { "a": "aa", "b": "bb", "c": "cc" }
              }
         }
    }
}

  1. iOS设备处于离线状态。

  2. 我正在使用`听以下节点

    .observe(.childAdded..
    

    root / company1 / 05062017 / user1
    
  3. 现在,假设我要在以下添加一个新对象employee1

    5: { "a": "aa", "b": "bb", "c": "cc" }
    
  4. 如果我像这样添加对象,则会触发侦听器:

    updateChildValues(["root/company1/05062017/user1/5": ["a": "aa", ...]])
    
  5. 问题是我是否要添加这样的对象

    updateChildValues([
        "root/company1/05062017/user1/5/a": "aa",
        "root/company1/05062017/user1/5/b": "bb",
        "root/company1/05062017/user1/5/c": "cc", 
    ])
    

    在这种情况下,直到我连接到Internet,听众才会被触发。

  6. 如果我连接到Internet,然后再次断开连接,一切都会恢复。问题是,有时在一天的开始时,Internet不可用,所以我必须在没有连接的情况下开始工作。

我现在已经解决了这个问题,我想知道这种行为背后的原因是什么?

弗兰克·范普菲伦

这不是错误,而是Firebase保证的一部分。这绝对是没有多少开发人员遇到的行为,所以我将尝试解释...

Firebase客户端仅在确定具有该位置的完整数据时才触发该位置的事件。


这段代码:

updateChildValues(["root/company1/05062017/user1/5": ["a": "aa", ...]])

是相同的:

.child("root/company1/05062017/user1/5").setValue(["a": "aa", ...])

这将替换处的所有数据root/company1/05062017/user1/5,因此客户端可以确定该位置["a": "aa", ...]是完整的新数据。


但是,当您运行此代码时:

updateChildValues([
  "root/company1/05062017/user1/5/a": "aa",
  "root/company1/05062017/user1/5/b": "bb",
  "root/company1/05062017/user1/5/c": "cc", 
])

客户端在任何时候都无法保证知道所有数据root/company1/05062017/user1/5(因为您不是专门写该节点的),因此它不会触发事件,直到与服务器协调为止。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java中的侦听器如何工作?

在Firebase中执行多位置更新时如何使用事务?

Firebase Value事件侦听器如何工作?

Firebase侦听器实际上如何工作?

如何在测试中的ApplicationEvent侦听器之前进行一些设置工作

如何使Java程序在侦听器工作时等待?

Provider中的侦听器如何在Flutter中工作?

如何在消息侦听器中更新ListView?

在同一引用上有多个侦听器时从 Firebase 中删除侦听器

如何在Angular2中使用AngularFire2或Firebase进行多位置“删除”

在对商店进行任何更新时,redux是否会评估商店的所有侦听器?

Flutter Firebase:使用流生成器时如何删除Firebase侦听器?

Google定位服务更新忽略了位置侦听器(android)

当您在不同的应用程序上时如何使事件侦听器工作

Firebase Realtime Database是否可以在调用侦听器时删除侦听器

Value事件如何在Firebase侦听器的更新上起作用?

来自 Firebase 事件侦听器的 Java 异步更新

用于用户详细信息更新的 Firebase 侦听器

如何删除事件侦听器,以便在卸载组件时不尝试更新状态?

android firebase 在侦听器中调用 getValue() 时无法实例化抽象类

React-在侦听器中访问全局范围时不会更新

Firebase多位置更新时间戳

Firebase实时侦听器概念-如何从侦听器分离/退订?

如何使服务在生命周期事件侦听器中工作

如何获取表单提交事件侦听器以在JS中工作?

应用程序在后台时的Firebase侦听器

使用Jasmine测试$ emit时如何触发$ emit在控制器中测试$ on侦听器?

如何停止位置侦听器服务?(现在不停止)

将点击侦听器放在mvvm android中的位置