RxJava / RxAndroid:错误后继续范围循环

时间:2017-09-11 17:21:24

标签: android range rx-java rx-java2 onerror

以下是我的示例代码,结果如下:

Observable.range(0, 10)
    .flatMap(actNumber -> {
        if (actNumber == 3) {
            return Observable.error(new Throwable("This is an error"));
        }
        return Observable.just(actNumber);
        })
    .onErrorReturnItem(-1)
    .subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer number) throws Exception {
            Logs.d("number -> " + number);
        }
    }, new Consumer<Throwable>() {
         @Override
         public void accept(Throwable throwable) throws Exception {
             Log.d("RX", "Error: " + throwable.toString());
         }
    });
  

0,1,2,-1

没关系,但我怎样才能为此结果设置它?

  

0,1,2,-1,4,5,6,7,8,9

谢谢你, 罗伯特

1 个答案:

答案 0 :(得分:1)

根据Observable contract,一旦Observable发出onErroronCompleted,Observable信号就不会再发出任何元素。您遇到的问题是,如果号码为Observable.error(),您将返回3onErrorConsumer发送给Observable .error(new Throwable("error")) .catchErrorResumeNext(Observable.range(3, 10)) ,然后终止信号。

根据合同,无法在错误后继续发出信号。但是,您可以做的是捕获并从错误中恢复并开始返回新的Observable信号。运营商的文档可以be found here

这是一个例子

{{1}}

(注意:我没有测试此代码,但它应该指向正确的