Почему DispatchGroup работает некорректно
Я хочу, чтобы функция ждала, пока первая функция сначала получит данные из firebase, а затем выполнит вторую, но оказывается, что она не работает в правильном порядке
func getMenuData(){
getMenu()
getIngredient()
getRecipe()
self.dispatchGroup.notify(queue: .main){
print("finished download")
}
}
func getMenu(){
self.dispatchGroup.enter()
let menu = self.ref.collection("menu").document("menu1")
menu.getDocument(source: .cache) { (document, error) in
if let document = document {
let menuName = document.get("menuEngName") as! String
print("MenuName = \(menuName)")
} else {
print("Document does not exist in cache")
}
}
self.dispatchGroup.leave()
}
func getIngredient(){
for n in 1...5 {
print("getIngre")
}
}
func getRecipe(){
for n in 1...5 {
print("getRecipe")
}
}
Оказалось, что "завершенная загрузка" была напечатана перед MenuName.
заранее спасибо
1 ответ
Решение
В leave
линия должна быть внутри закрытия завершения
func getMenu() {
self.dispatchGroup.enter()
let menu = self.ref.collection("menu").document("menu1")
menu.getDocument(source: .cache) { (document, error) in
if let document = document {
let menuName = document.get("menuEngName") as! String
print("MenuName = \(menuName)")
} else {
print("Document does not exist in cache")
}
self.dispatchGroup.leave()
}
}