如何在rxjava链调用中传递第一个throwable错误?

问题描述 投票:0回答:1

我正在联系我的网络和本地api。如果网络api无法获取数据,我正在使用我的本地api调用来捕获它。但是,在网络和本地api都失败的情况下,我想向用户显示来自网络api而不是本地的错误。这就是我所拥有的:

remoteSource.fetchData()
            .onErrorResumeNext(e -> localSource.fetchData())
            .doOnSuccess(this::saveData)

我能想到的解决方案是将onErrorResumeNext中捕获的throwable保存在链调用之外的单独变量中。但是,我正在使用MVP架构,这意味着它位于model层内。只有最后一个错误将被presenter层捕获,这是本地源的错误。

android rx-java2 rx-android android-mvp
1个回答
2
投票

您可以在嵌套调用中恢复原始错误:

remoteSource.fetchData()
        .onErrorResumeNext(e -> 
              localSource.fetchData()
              .onErrorResumeNext(f -> Single.error(e))
        )
        .doOnSuccess(this::saveData)
© www.soinside.com 2019 - 2024. All rights reserved.