【问题标题】:RxJava / RxAndroid: continue range loop after errorRxJava / RxAndroid:错误后继续范围循环
【发布时间】:2017-09-11 17:21:24
【问题描述】:

这是我的示例代码和结果:

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

谢谢你, 罗伯特

【问题讨论】:

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


    【解决方案1】:

    根据 Observable contract,一旦 Observable 发出 onErroronCompleted,则 Observable 信号将不再发出任何元素。您遇到的问题是,如果号码是 3,您将返回 Observable.error(),这将向您的 Consumer 发出 onError,然后终止信号。

    根据合同,您不能在信号出错后继续该信号。但是,您可以做的是捕获并从错误中恢复并开始返回一个新的 Observable 信号。操作员的文档可以be found here

    这是一个例子

    Observable
        .error(new Throwable("error"))
        .catchErrorResumeNext(Observable.range(3, 10))
    

    (注意:我没有测试这段代码,但它应该指向你的右边

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多