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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
func loadUserInfoAndProfile(login: String, password: String) { UserManager.shared.auth(login: login, password: password) .flatMap { _ in return UserManager.shared.info() } .map { (result: APIResult<UserInfo>) -> 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>) -> 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) } |