美文网首页
RxJava(七)--错误处理操作符

RxJava(七)--错误处理操作符

作者: azu_test | 来源:发表于2019-03-11 16:10 被阅读0次

错误处理操作符

catch、retry

实例与功能介绍

1. catch操作符

代码实例

        Observable observable = Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                for (int i=0;i<10;i++){
                    if (i>2){
                        subscriber.onError(new Throwable("test"));
                    }
                    subscriber.onNext(i);
                }
                subscriber.onCompleted();
            }
        });

        observable = observable.onErrorReturn(new Func1<Throwable,Integer>() {
            @Override
            public Integer call(Throwable o) {
                return 13;
            }
        });

结果

结果: 0
结果: 1
结果: 2
结果: 13
结束

功能:catch操作符拦截原始Observable的onError通知,将他替换为其他数据项或数据序列,让Observable能够正常终止或者根本不终止。

  • onErrorReturn:Observable遇到错误时使用备用的Observable,忽略原有Observable的onError调用;会调用一个特殊的项并调用观察者的onCompleted方法。
  • onErrorResumeNext:Observable遇到错误时使用备用的Observable,忽略原有Observable的onError调用;发射备用Observable的数据。
  • onExceptionResumeNext:onErrorResumeNext类似。不同的是如果onError收到的异常不是Exception时,不会使用备用的Observable,而是把错误数据传递给观察者的onError方法。
2. retry操作符

代码实例

        Observable observable = Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                for (int i=0;i<10;i++){
                    if (i>2){
                        subscriber.onError(new Throwable("test"));
                    }
                    subscriber.onNext(i);
                }
                subscriber.onCompleted();
            }
        });

        observable = observable.retry(2);

结果

结果: 0
结果: 1
结果: 2
结果: 0
结果: 1
结果: 2
结果: 0
结果: 1
结果: 2
异常

功能:retry操作符不会将原始Observable的onError传递给观察者,它会订阅这个Observable,再给他一次机会无错误地重新完成其数据序列。

相关文章

网友评论

      本文标题:RxJava(七)--错误处理操作符

      本文链接:https://www.haomeiwen.com/subject/ecyrpqtx.html