user
29384092840923
chatRoomsJoined
chatRoom1
chatroom5
chatrooms
chatRoom1
users
29384092840923
298340982039490
我正在尝试加载一个tableview,其中包含有关用户加入的聊天室的信息。在上面的例子中,用户“29384092840923”已加入chatRoom1,我需要chatRoom1中用户节点的子节点数
我最初的策略是从“user”节点获取一个joinChatRooms数组,然后执行for循环并对数组中的每个项执行getDocument。
static func loadFavoriteRooms(forUID uid: String, completedFetch: @escaping (_ favoritedRoomsArray : [String]?, _ error : Error?)->()) {
let userFavoritesRef = database.collection("users").document(uid).collection("favoritedRooms")
userFavoritesRef.getDocuments { (snapshot, error) in
if error != nil {
completedFetch(nil, error!)
print("There was an error", error!.localizedDescription)
} else {
var roomArray = [String]()
for document in snapshot!.documents {
//Create a roomRef with the documentID, do a getDocument with it, and create an object with it?
let roomName = document.documentID
roomArray.append(roomName)
}
completedFetch(roomArray, nil)
}
}
}
我上面发生的事情的问题是,一旦我开始在for循环中为各个roomRefs发送额外的getDocument请求,我的completedFetch完成调用在异步完成for循环之前返回,我没有得到填充阵列回来。
最干净的方法是什么?我是否需要在此处执行调度组或是否有更好的方法来实现此目的?出于某种原因,在这里使用带有firestore的调度组似乎是错误的。