处理错误但保留订阅原始Observable

时间:2017-02-24 08:24:10

标签: ios swift rx-swift rx-cocoa

假设我有一个按钮,每次点击该按钮,我都想执行网络请求并将结果绑定到主调度程序上的视图。我还需要处理此网络请求可能失败的可能性。这是我最初的想法:

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)

然而,它似乎再次不如我想象的那么优雅。

1 个答案:

答案 0 :(得分:0)

我将使用Result类型来包装可能发生的返回结果和错误。

您可以在Result方法

中转换为networkRequest()类型