我有以下从Firebase
获取messages
的函数,我想知道什么时候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
发布于 2019-06-25 08:59:58
在顶部创建一个dispatchGroup对象,然后立即输入()。https://developer.apple.com/documentation/dispatch/dispatchgroup
let dg = DispatchGroup()
然后,在每个你想要做的子下载中,一旦完成就输入()和离开()。
最后,你可以调用
dg.notify(queue: .main, work: {
// escape the close
})
https://stackoverflow.com/questions/56745476
复制相似问题