Mam zagnieżdżone zadania asynchroniczne. Funkcja poniżej następującego po niej przepływu: loadEpisodes (załaduj listę odcinków) -> użyj tablicy od zakończenia, aby przejrzeć każdy odcinek pierwszy i załaduj komentarze (jeszcze jedno zadanie asynchroniczne) dla określonego odcinka.Synchronizuj zagnieżdżone zadanie asynchroniczne
Problem polega na: comletion (fullEpisodes) sprawdzony przed zakończeniem zadania ładowania komentarzy. Próbowałem użyć Dispatch Group (drugi blok kodu), ale to nie działa.
func loadComments(comletion: @escaping ([Episode]) -> Void){
loadEpisodes(completion: {
episodes in
var fullyEpisodes = [Episode]()
for episode in episodes {
WebService().load(resource: episode.comment, comletion: {
comments in
if let comments = comments {
let _episode = Episode(id: episode.id, title: episode.title, comments: comments)
fullyEpisodes.append(_episode)
print("done")
}
})
}
comletion(fullyEpisodes)
})
}
Zaimplementowane Wysłanie Grupa:
func loadComments(comletion: @escaping ([Episode]) -> Void){
loadEpisodes(completion: {
episodes in
var fullyEpisodes = [Episode]()
let group = DispatchGroup()
for episode in episodes {
group.enter()
WebService().load(resource: episode.comment, comletion: {
comments in
if let comments = comments {
let _episode = Episode(id: episode.id, title: episode.title, comments: comments)
fullyEpisodes.append(_episode)
print("done")
}
})
group.leave()
}
group.wait()
group.notify(queue: .main, execute: {
comletion(fullyEpisodes)
})
})
}
Kiedy próbuję zastąpić żądania obciążenia komentarz przez „print (” coś „)” (nie nowe zadanie asynchroniczne), grupa Wysłanie działa.
Pomyśl oznaczało 'grand-środkowo-dispatch' nie' Największą-common-divisor';) –
@JacobKing: Ups! Ustawiłem niewłaściwy tag. Dzięki: D –
Tak, denerwująco, określenie tagu gcd zastępuje go "największy-wspólny-dzielnik" (mimo, że istnieje dużo więcej pytań na temat Stack Overflow dotyczących głównej centralnej wysyłki niż największy wspólny dzielnik). Zobacz http://meta.stackoverflow.com/q/251143/1271826 lub http://meta.stackexchange.com/questions/165133/propose-significant-change-in-definition-of-gcd-tag – Rob