我有一个 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)
}
)
if appDataManager.getStations()
抛出错误,我仍然想继续并到达onLoginSuccess()
method.
然而如果getUserAccessToken(username, password)
fails, onLoginFailure
应该被称为。
我尝试在平面图之后及其内部添加 onErrorResumeNext() 和 onExceptionResumeNext() ,但如果我这样做,链就会退出并且不会继续并到达订阅
我在 Kotlin 中解决了这个问题这里(stackoverflow 链接) https://stackoverflow.com/questions/48229474/rxjava-filter-on-error/48231604#48231604
它可以通过使用映射、过滤、选项和选项的组合来完成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)
}
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)