【问题标题】:Firebase: How to check query is finished? (swift)Firebase:如何检查查询是否完成? (迅速)
【发布时间】:2016-11-24 09:36:32
【问题描述】:

我试图在从 firebase 查询数据时显示微调器,并在返回查询结果时隐藏它。 有什么方法可以知道查询是否已完成检索所有数据? ?

self.handle = self.ref.child("users").observeEventType(.Value, withBlock: { (snapshot) in
        if snapshot.exists() {
            print ("snapshot exist")
            print (snapshot.childrenCount)
        }
        else {
                print ("snapshot doesn't exist")
            }
        })

【问题讨论】:

    标签: swift firebase firebase-realtime-database observers


    【解决方案1】:

    当调用.Value 观察者的回调块时,它会获取该位置当前已知的所有数据。所以你可以在块中隐藏微调器:

    self.handle = self.ref.child("users").observeEventType(.Value, withBlock: { (snapshot) in
        // TODO: hide spinner here
        if snapshot.exists() {
            print ("snapshot exist")
            print (snapshot.childrenCount)
        }
        else {
            print ("snapshot doesn't exist")
        }
    })
    

    请记住,Firebase 观察者会不断同步数据,因此您的阻止可能会运行多次。

    【讨论】:

    • 太好了,感谢您的澄清。我认为每次获取孩子时都会调用该块。
    • 有点。 .Value 导致它被调用一次,带有节点及其所有子节点。如果该节点中的任何数据(包括其子节点中的任何数据)发生更改,则会再次调用它,再次提供所有数据。因此,如果添加了一个孩子,它将再次被调用。但是如果没有添加子元素,它只会被调用一次。您可能会想到 .ChildAdded,它被调用了 n 次,其中 n 是孩子的数量。如果添加了任何孩子,它也会被调用。
    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 2022-01-02
    • 2015-01-13
    • 2015-10-25
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多