Amb*_*mbi 4 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)
}
)
Run Code Online (Sandbox Code Playgroud)
如果appDataManager.getStations()抛出错误,我仍然想继续并到达该onLoginSuccess()方法。
但是如果getUserAccessToken(username, password)失败,onLoginFailure应该调用。
我尝试在平面图之后及其内部添加 onErrorResumeNext() 和 onExceptionResumeNext() ,但如果我这样做,链就会退出并且不会继续并到达订阅
我在这里用 Kotlin 解决了这个问题(stackoverflow 链接)
它可以通过使用映射、过滤、选项和 的组合来完成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)
}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7855 次 |
| 最近记录: |