如何有条件地处理onErrorReturn中的错误?

时间:2018-04-09 19:27:32

标签: java android rx-java rx-java2

如果observable遇到错误,我使用onErrorReturn发出特定项而不是调用onError

Observable<String> observable = getObservableSource();
observable.onErrorReturn(error -> "All Good!")
          .subscribeOn(Schedulers.io())
          .observeOn(Schedulers.trampoline())
          .subscribe(item -> onNextAction(),
              error -> onErrorAction()
          );

这样可以正常工作,但只有在满足某些条件时我才会在onErrorReturn中使用错误。就像从catch块中重新抛出异常一样。

类似的东西:

onErrorReturn(error -> {
    if (condition) {
        return "All Good!";
    } else {
        // Don't consume error. What to do here?
        throw error; // This gives error [Unhandled Exception: java.lang.Throwable]
    }
});

有没有办法从onErrorReturn内部向下传播可观察链中的错误,好像onErrorReturn从未出现过?

2 个答案:

答案 0 :(得分:5)

使用onErrorResumeNext我想你可以达到你想要的效果

observable.onErrorResumeNext(error -> {
              if(errorOk)
                  return Observable.just(ok)
              else
                  return Observable.error(error)
          })
          .subscribeOn(Schedulers.io())
          .observeOn(Schedulers.trampoline())
          .subscribe(item -> onNextAction(),
              error -> onErrorAction()
          );

答案 1 :(得分:0)

您可以创建一个通常会收到此错误的方法,例如

private void onError(Throwable error) {
// do whatever you want with your error
}

...
.onErrorReturn( error -> onError(error) )