我正面临一个问题,在抛出异常后从可观察对象中获得其余项目。假设我有10个项目要发出,在第二个项目上,我抛出一个异常,我的Subscriber onError被调用并抛出异常,之后,剩下的8个项目将被发出。我如何在这里继续向订阅者(onNext)发送其余的8个项目?由于
使用onErrorResumeNext告诉你的管道在发生Exception时发出什么。看看这个单元测试示例。
@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
源发出的10项发出错误或一些操作符之间?如果源程序发出错误,那么恢复必须内置到源程序中,因为在RxJava中没有显式的恢复契约。如果中间有一个运算符发出一个错误,那么这个错误必须被onErrorResumeNext()
之类的东西抑制。查看代码使注释更容易。