链接可观察对象(即网络请求)
Chaining observables (that are network requests)
我有一个名为 login
的网络请求 returns 一个 Observable<UserInfo>
。我需要根据从 login
返回的数据是否有计数 > 1,从该结果进行另一个 API 调用,否则,我只需要转到另一个视图控制器。我正在尝试使用 flatMapLatest
来检查第一个请求 login
并进行下一个网络调用 jobStates
(returns 和 Observable<JobState>
,但是我认为我没有正确安排它们。有什么想法吗?有更好/更简单的方法吗?
这是它的样子:
我希望看到这样的内容:
func login() {
let loginResult = networkService
.login(login: usernameTextField.text!, password: passwordTextField.text!)
.share()
loginResult
.filter { [=10=].count > 1 }
.subscribe(onNext: { userInfo in
// stop here and go to a different view with userInfo data
})
.disposed(by: disposeBag)
let networkService = self.networkService // so you don't have to capture self below
loginResult
.filter { [=10=].count <= 1 }
.flatMapLatest { networkService.jobStates(locationId: [=10=].locationId) }
.subscribe(
onNext: { data in
// do whatever with data from second request
},
onError: { error in
// if either request errors, you will end up here.
})
.disposed(by: disposeBag)
}
当您有两种不同的可能结果时,您需要两种不同的订阅。
我有一个名为 login
的网络请求 returns 一个 Observable<UserInfo>
。我需要根据从 login
返回的数据是否有计数 > 1,从该结果进行另一个 API 调用,否则,我只需要转到另一个视图控制器。我正在尝试使用 flatMapLatest
来检查第一个请求 login
并进行下一个网络调用 jobStates
(returns 和 Observable<JobState>
,但是我认为我没有正确安排它们。有什么想法吗?有更好/更简单的方法吗?
这是它的样子:
我希望看到这样的内容:
func login() {
let loginResult = networkService
.login(login: usernameTextField.text!, password: passwordTextField.text!)
.share()
loginResult
.filter { [=10=].count > 1 }
.subscribe(onNext: { userInfo in
// stop here and go to a different view with userInfo data
})
.disposed(by: disposeBag)
let networkService = self.networkService // so you don't have to capture self below
loginResult
.filter { [=10=].count <= 1 }
.flatMapLatest { networkService.jobStates(locationId: [=10=].locationId) }
.subscribe(
onNext: { data in
// do whatever with data from second request
},
onError: { error in
// if either request errors, you will end up here.
})
.disposed(by: disposeBag)
}
当您有两种不同的可能结果时,您需要两种不同的订阅。