java - RXJava 忽略错误并在链中继续

标签 java android kotlin rx-java

我有一个可以抛出错误的 RXJava 链。 我希望链继续并忽略错误并到达订阅,仅针对某些特定错误。

例如在这段代码中

authDataManager
                    .getUserAccessToken(username, password)
                    .subscribeOn(Schedulers.io())
                    .doOnNext({
                        authDataManager.saveUserAccessToken(it)
                    })
                    .flatMap {
                        appDataManager.getStations()
                    }
                    .doOnNext({
                        appDataManager.persistStations(it)
                    })
                    .flatMap {
                        appDataManager.getDriverInformation()
                    }
                    .doOnNext({
                        appDataManager.persistDriverInformation(it)
                    })
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(
                            {
                                onLoginSuccess()
                            },
                            {
                                onLoginFailure(it)
                            }
                    )

如果 appDataManager.getStations() 抛出错误,我仍然想继续并到达 onLoginSuccess() 方法。

但是,如果 getUserAccessToken(username, password) 失败,则应调用 onLoginFailure

我试图在平面图之后和它们内部添加 onErrorResumeNext() 和 onExceptionResumeNext(),但如果我这样做,链就会退出,不会继续并到达订阅

最佳答案

我在 Kotlin 中解决了这个问题 here (stackoverflow link)

这可以通过结合使用映射、过滤、可选值和onErrorResumeNext 来完成。我认为这与当前版本的 RxJava 一样优雅。

authDataManager
    .getUserAccessToken(username, password)
    .subscribeOn(Schedulers.io())
    .doOnNext({
        authDataManager.saveUserAccessToken(it)
    })
    .flatMap {
        appDataManager.getStations()
            .map(stations -> Single.just(Optional.of(stations))
            .onErrorResumeNext(error -> Single.just(Optional.empty()))                    
     }
     .filter(optional -> optional.isPresent())
     .map(stations -> optional.get())
     .doOnNext({
         appDataManager.persistStations(it)
     })
     .flatMap {
         appDataManager.getDriverInformation()
     }
     .doOnNext({
         appDataManager.persistDriverInformation(it)
     })
     .observeOn(AndroidSchedulers.mainThread())
     .subscribe(
         {
             onLoginSuccess()
         },
         {
             onLoginFailure(it)
         }
     )

关于java - RXJava 忽略错误并在链中继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47349523/

相关文章:

java - Hibernate 不会级联实体保存

android - 发送PCL命令到蓝牙打印机

android - MediaScanner、onScanCompleted 未被调用

java - Spring R2DBC:如果id为零,则保存新实体

java - 如何在 Android 中离线运行 Dokka

java - 添加不同长度的数组

java - 尝试压缩图像(Gzip+Jpeg)然后解压

android - 插入一个包含撇号的字符串(sqlite)

android - Kotlin 中的类继承和参数化类型 : Is Subtype Polymorphism possible with generics?

java - 调用运算符时出现 NullPointerException