【问题标题】:Firebase Value and ChildAdded (further explanation needed)Firebase 值和 ChildAdded(需要进一步解释)
【发布时间】:2016-06-02 17:37:17
【问题描述】:

我一遍又一遍地阅读 Firebase 文档,只是需要澄清一下。这与我对 Firebase 的一般理解相比,与我的特定代码无关。

我知道.Value 每次调用它时都会检索所有数据,并继续监视数据库的更改。 .ChildAdded 查找引用的子项中的更改。 .ChildAdded 最初是否也检索所有值?我应该为同一路径同时实现.Value.ChildAdded 吗?如果没有,当我尝试只执行 .ChildAdded 时,什么都没有显示,但是当我运行 .Value 时,我的所有项目都按预期显示。我不希望每次更改或添加单个值时都从数据库中重新获取每个值,因为当我有数千个项目要获取时,这似乎会导致一些带宽问题。最好的工作流程是使用 ObserveSingleEventOfType 创建一个 .Value 函数 (getAllItems()),因此它只调用一次,然后有一个重复的函数 (getNewItems()),.ChildAdded 和 observeEventOfType 除外?

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    如果你有这个节点

     node:{
       data1:"data",
       data2:{
         subdata1:1,
         subdata2:2
       }
     }
    

    ValueobserveEventOfType 将在第一次调用 + 每次 "node" 中的某些内容发生变化时,ValueobserveSingleEventOfType 将只被调用一次

    带有observeEventOfType的Child_Added将被调用两次["data1"(它将包含字符串“data”和"data2"(它将包含一个带有子"subdata1""subdata2的对象)]

    Child_ChangedobserveEventOfType 将在每次 "data1""data2" 更改时调用("data2" 中的事件将在每次 "subdata1""subdata2" 更改时调用,或者如果您插入 @ 987654339@)

    这可以组合使用,但取决于每个场景......

    对于事件类型:

    通常当您指向像"data1" 这样的最终节点时,您使用Value,而当您处于具有类似节点列表的节点(例如"data2")中时,您使用child_added、@987654344 的组合@和child_removed

    对于观察者类型:

    如果您想在特定时刻获得价值,这很简单;您使用“单一事件观察者”。如果您想随时关注价值,请使用“事件观察者”

    【讨论】:

    • 有道理。如果我的结构类似于 data2,为什么 .ChildAdded 最初无法获取节点中的所有值(并继续监视添加)但 .Value 有效?
    • 如果你的结构像data2,添加的child会被调用两次,1)回调snapshot.key为subdata1,值为1; 2)回调snapshot.key为subdata2,值为2。
    • 以这种方式调用它是为了避免一直通过网络发送所有数据,它只发送新数据,因为 child_changed 只发送改变的数据
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多