Chaining example on RxSwift

No comments on Chaining example on RxSwift

Written by

in

This is one of the reasons I love RxSwift. It allows to chain requests beautifully.

Here I authorize user by getting auth token, then I request userInfo, then I request profile.

func loadUserInfoAndProfile(login: String, password: String) {
    UserManager.shared.auth(login: login, password: password)
        .flatMap { _ in
            return UserManager.shared.info()
        }
        .map { (result: APIResult) -> UserInfo? in
            switch result {
            case .success(let value):
                UserManager.shared.userInfo = value
                return value
            case .failure(let error):
                print(error)
                return nil
            }
        }
        .flatMap { userInfo in
            return ServiceManager.shared.profileView()
        }
        .map { (result: APIResult) -> ServiceProfile? in
            switch result {
            case .success(let value):
                ServiceManager.shared.profile.value = value
                return value
            case .failure(let error):
                print(error)
                return nil
            }
        }
        .subscribe(onNext: { _ in
            self.showTabs()
        }, onError: { error in
            self.showTutorialViewController()
        })
        .disposed(by: disposeBag)
}

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *