1

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

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)

然而,它似乎又没有我想象的那么优雅。

4

1 回答 1

0

我将使用Resulttype 来包装返回结果和可能出现的错误。

您可以转换为Result输入您的networkRequest()方法

于 2017-02-24T18:16:31.910 回答