Почему 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()
    }
}
Другие вопросы по тегам