假设我有一个按钮,每次点击该按钮时,我都想执行网络请求并将结果绑定到主调度程序上的视图。我还需要处理此网络请求可能失败的可能性。这是我最初的想法:
button.rx.tap.asObservable()
.flatMap(networkRequest)
.asDriver(onErrorRecover: handleError)
.drive(uiComponent)
.disposed(by: disposeBag)
我想要发生的是处理可能的错误handleError
,然后在再次点击按钮时再次发出请求。这不起作用,因为如果发生错误,我现在订阅了Driver
返回的handleError
. 我唯一的另一个想法是保留信号Observable
并在subscribe
. 这也需要一个observeOn
. 我希望有比这更优雅的东西。有没有人有这个用例的替代方法?
编辑
我还应该提到,对我们有用的一种方法是处理flatMap
.
button.rx.tap.asObservable()
.flatMap {
return networkRequest()
.catchError(handleError)
}
.asDriver(onErrorDriveWith: Driver.empty())
.drive(uiComponent)
.disposed(by: disposeBag)
然而,它似乎又没有我想象的那么优雅。