Как узнать, когда Firebase завершил загрузку всех узлов в снимке с помощью Swift? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть следующая функция, которая извлекает messages из Firebase, я хочу знать, когда Firebase завершит загрузку всех дочерних узлов данных snapshot, чтобы я мог передать сигнал через handler что все данные завершили загрузку.

func loadLatestChatConversationMessages(forUserId forId: String!, handler: @escaping (Message?) -> ()){

    guard let uid = Auth.auth().currentUser?.uid else {return}

    let ref = REF_USERS_MESSAGES.child(uid).child(forId)

    let firstBatchCount: Int = 12

       RefUserMessagesChatConvoHandle = ref.queryOrderedByKey().queryLimited(toLast: UInt(firstBatchCount)).observe(.value, with: { (snapshot) in


            if snapshot.childrenCount > 0 {

                for child in snapshot.children.allObjects as! [DataSnapshot]{

                    let key = child.key


                    self.REF_MESSAGES.child(key).observeSingleEvent(of: .value, with: { (snapshot) in


                        guard var dictionary = snapshot.value as? [String : Any] else { return }

                        dictionary["messageId"] = key

                        let message = Message(dictionary: dictionary)

                        handler(message)

                    }, withCancel: nil)


                }//end for


            } else {
                print("returning - no messages.")
                handler(nil)

            }// end if snapshot.childrenCount

        }, withCancel: nil)


}//end func

1 Ответ

0 голосов
/ 25 июня 2019

вверху создайте объект dispatchGroup и сразу введите enter (). https://developer.apple.com/documentation/dispatch/dispatchgroup

let dg = DispatchGroup()

и затем в каждой дочерней загрузке, которую вы хотите сделать, вы вводите () и выходите (), как только это будет сделано.

тогда, наконец, вы звоните

dg.notify(queue: .main, work: {
    // escape the close
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...