这可能是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" }
}
}
}
}
iOS设备处于离线状态。
我正在使用`听以下节点
.observe(.childAdded..
上
root / company1 / 05062017 / user1
现在,假设我要在以下添加一个新对象employee1
:
5: { "a": "aa", "b": "bb", "c": "cc" }
如果我像这样添加对象,则会触发侦听器:
updateChildValues(["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",
])
在这种情况下,直到我连接到Internet,听众才会被触发。
如果我连接到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] 删除。
我来说两句