您能帮我解开这个厄运金字塔(回调地狱)吗?

时间:2020-04-11 08:59:36

标签: swift firebase semaphore asynccallback

我正在尝试扩展自己的编码技能,最近我一直在阅读有关如何使用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)
        }
    }
}

0 个答案:

没有答案
相关问题