我有一个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(),但如果我这样做,链就会退出并且不会继续并到达订阅
3 回答
我在Kotlin认识了这一点here (stackoverflow link)
它可以通过使用映射,过滤,可选项和
onErrorResumeNext
的组合来完成 . 我认为这与当前版本的RxJava一样优雅 .站在@ savepopulation的答案的肩膀上,并使用观察,你有三个不同的观察链:
主观察链流向完成,而两个子链完全不参与日志;它们只是通过获取用户访问令牌来触发 .
如果您需要这些辅助分支以异步方式运行到主链,则必须添加
subscribeOn()
/observeOn()
运算符 .我想你可以使用
onErrorResumeNext
运算符 .