使用Firestore有效地链接getDocument(Swift)

时间:2018-09-28 05:53:40

标签: swift firebase asynchronous firebase-realtime-database google-cloud-firestore

问题是,我该如何修复下面的代码,以便它正确获取所有联系信息?当前正在使用以下设置跳过文档。

数据库布局:

user-contacts
  user_id
    [contact1_id, 1]
    [contact2_id, 1]

contacts
  contact1_id
    [contact1_info]
  contact2_id
    [contact2_info]

我需要首先从“用户联系人”集合中获取联系人ID,然后从“联系人”集合中获取联系人信息。 暂时忽略“ if let金字塔”。

let contactArr = [Contact]()
Firestore.firestore().collection("user-contacts").document(user_id).getDocument { (document, err) in
            if let document = document, document.exists {
                if let data = document.data() {
                    let contactIDs = data.keys
                    for (index, id) in contactIDs.enumerated() {
                        Firestore.firestore().collection("contacts").document(id).getDocument(completion: { (document, err) in
                            if let document = document, document.exists {
                                if let contact = document.data() {
                                        contactArr.append(contact)
                                        if index == contactIDs.count - 1 {
                                           //DO STUFF WHEN DONE
                                           //NOT ALL CONTACTS WILL BE IN THE CONTACT ARRAY HERE
                                        }
                                    })

                                }
                            }
                        })
                    }
                }
            }
        }

以上所述的问题是我并不总是找回所有文件。似乎正在发生某种线程问题,或者只是跳过某些文档。我尝试添加一个dispatchGroup,但是没有用(很有可能我没有正确执行它。我看到有人说我不能在主线程上调用dispatchGroup.notify,因为这些Firestore调用在主线程上之类的东西,但是我对dispatchGroups没有任何经验。

0 个答案:

没有答案