我有一个可以抛出错误的 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/