问题是,我该如何修复下面的代码,以便它正确获取所有联系信息?当前正在使用以下设置跳过文档。
数据库布局:
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没有任何经验。