用Firestore链接getDocument?

时间:2017-11-26 19:38:54

标签: ios swift firebase google-cloud-firestore

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的调度组似乎是错误的。

0 个答案:

没有答案