我在调用服务的类上有一个方法,它使用该服务的响应将ID传递给另一个服务,进行第二次调用。
如果其中任何一个失败或序列完成,我想调用另一个函数self.showHomeScene()
private func getPropsForHomeScene() {
profileService.fetchCurrentUser()
.map { $0.company }
.flatMap(companyService.fetchCompany)
.distinctUntilChanged()
.subscribe(onNext: { company in
self.showHomeScene()
}, onError: { err in
print(err.localizedDescription)
}).disposed(by: disposeBag)
}
目前我在订阅块中执行此操作,但是在发生错误时不会调用此方法。在前两个操作之后调用此操作非常重要。
对于这个和类似的问题,您想要概述执行此输出的所有原因并使它们成为相关流的输入。
您希望在第一次调用失败或第二次调用发出停止事件时调用showHomeScene()方法。
private func getPropsForHomeScene() {
let currentUser = profileService.fetchCurrentUser()
.share(replay: 1)
let company = currentUser
.map { $0.company }
.flatMap { companyService.fetchCompany($0) }
let currentUserFailed = currentUser
.materialize()
.map { $0.error }
.filter { $0 != nil }
.map { _ in }
let companyStopped = company
.materialize()
.filter { $0.isStopEvent }
.map { _ in }
Observable.merge(currentUserFailed, companyStopped)
.subscribe(onNext: {
self.showHomeScene()
})
.disposed(by: disposeBag)
}
我注意到你没有对实际公司或当前获取的用户对象做任何事情。这当然不会影响这个subscribe
,但我希望你也想订阅currentUser
和company
来做些什么。在这种情况下,您应该将share
放在公司流上,就像它已经在currentUser流上一样。