Почему DispatchGroup не работает правильно - PullRequest
0 голосов
/ 03 мая 2020

Я хочу, чтобы функция ждала, пока первая функция получит данные из базы данных, а затем выполнит вторую, но оказалось, что она не работает в правильном порядке.

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 Ответ

0 голосов
/ 03 мая 2020

Строка 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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...