java - 如何有条件地处理 Observable 链中的错误?

标签 java android rx-java rx-java2

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

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

这工作正常,但我想在 onErrorReturn 仅当满足某些条件时消耗错误。就像从 catch block 中重新抛出异常一样。

类似于:

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 从未存在过一样?

最佳答案

使用 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()
          );

关于java - 如何有条件地处理 Observable 链中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49740276/

相关文章:

rx-java - 也许可以完成

java - mSubscription.unsubscribe onCreate 与 Activity 中的 onDestroy 的工作方式相同吗?

java - 使用 RxJava/RxAndroid 依次执行不同类型的 Observable

java - Java 中是否可以使用相同接口(interface)的参数化和非参数化版本?

java - 你如何在Java中重复调用一个Thread?

java - Firebase Android : how do I access params nested in data via RemoteMessage?

java - 为什么我会收到 android.database.sqlite.sqlitecursor @ 错误

java - firebase 访问 token 是否自动刷新?

java - Primefaces动态树

android - 抽屉导航项目中未找到资源异常