我遇到一个问题,在抛出异常后从observable获取其余项目。假设我有10个项目要发出,在第二个项目上,我抛出一个异常,我的订阅者onError被调用,抛出异常,之后,其余8个项目将被发出。如何继续向我的订户(onNext)发送其余8个项目?感谢
答案 0 :(得分:0)
源发出的10个项目是否发出错误,或者介于两者之间的某个运算符?如果源发出错误,则必须将恢复内置到源中,因为RxJava中没有明确的合同要恢复。
如果介于两者之间的运算符发出错误,则必须通过onErrorResumeNext()
之类的内容来抑制该错误。查看代码可以更容易发表评论。
答案 1 :(得分:0)
使用onErrorResumeNext告诉管道在发生异常时要发出什么。看这个单元测试示例。
@Test
public void observableOnErrorResumeException() {
Integer[] numbers = {0, 1, 2, 3, 4, 5};
Observable.from(numbers)
.doOnNext(number -> {
if (number > 3) {
try {
throw new IllegalArgumentException();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
})
.onErrorResumeNext(t -> Observable.just(666))
.subscribe(System.out::println);
}
此代码将打印
0
1
2
3
666
您可以在此处查看更多示例https://github.com/politrons/reactive