RxNetty如何使用onErrorResumeNext

时间:2016-11-03 06:28:13

标签: rx-netty

我遇到一个问题,在抛出异常后从observable获取其余项目。假设我有10个项目要发出,在第二个项目上,我抛出一个异常,我的订阅者onError被调用,抛出异常,之后,其余8个项目将被发出。如何继续向我的订户(onNext)发送其余8个项目?感谢

2 个答案:

答案 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