假设我有一个按钮,每次点击该按钮,我都想执行网络请求并将结果绑定到主调度程序上的视图。我还需要处理此网络请求可能失败的可能性。这是我最初的想法:
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)
然而,它似乎再次不如我想象的那么优雅。
答案 0 :(得分:0)
我将使用Result
类型来包装可能发生的返回结果和错误。
您可以在Result
方法
networkRequest()
类型