gpt4 book ai didi

ios - 如何让听众在离线时在 Firebase 中工作以进行多位置更新

转载 作者:行者123 更新时间:2023-11-28 05:38:11 25 4
gpt4 key购买 nike

这可能是 Firebase 中的错误。 childAdded 如果我发布到 level 2 节点和更高节点,监听器不会被触发?

这是我的模式:

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,然后再次断开连接,一切都会恢复正常。问题是有时在一天的开始,互联网不可用,所以我不得不在没有连接的情况下开始工作。

我暂时解决了这个问题,我只想知道这种行为背后的原因是什么?

最佳答案

这不是错误,而是 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 中的所有数据(因为您没有专门编写该节点),因此它不会触发事件,直到它与服务器协调。

关于ios - 如何让听众在离线时在 Firebase 中工作以进行多位置更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57897583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com