Я пытаюсь расширить свои навыки кодирования, и недавно я читал о том, как избежать ада обратного вызова, используя DispatchGroup () и Semaphores ().
Может кто-нибудь помочь мне с примерами о том, как распутать эту функцию, которая выполняет несколько сетевых вызовов после завершения предыдущего?
Код выглядит следующим образом:
func fetchFollowingUsersAndUpdateCollectionView() {
UserService.shared.fetchCurrentUsersContacts { (result) in
switch result {
case .success(let contactUid):
UserService.shared.fetchUserInfo(userUid: contactUid) { (resultUserInfo) in
switch resultUserInfo {
case .success(let dict):
guard
let fullname = dict["fullname"],
let profileImageUrl = dict["profileImageUrl"]
else { return }
DispatchQueue.main.async {
UserService.shared.downloadAndCreateImage(url_String: profileImageUrl) { (imageResult) in
switch imageResult {
case .success(let profileImage):
let dispatchGroup = DispatchGroup()
dispatchGroup.notify(queue: .main) {
let user = User(uid: contactUid, fullname: fullname, profileImage: profileImage, isFollowed: true)
self.contactsArray.append(user)
self.selectUserCollectionView.reloadData()
}
case .failure(let imageResultError):
print(imageResultError.localizedDescription)
}
}
}
case .failure(let userInfoError):
print(userInfoError.localizedDescription)
}
}
case .failure(let resultError):
print(resultError.localizedDescription)
}
}
}