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)
}