Rxjava2 操作符 - Error Handling

Catch —拦截原始Observable的onError通知,将它替换为其它的数据项或数据序列,让产生的Observable能够正常终止或者根本不终止。
Rxjava2 实现:
onErrorResumeNext 在错误或异常发生时返回一个Observable,也就是说可以返回多个和源Observable相同类型的结果

onErrorReturn 在Observable发生错误的时候(即将回调oError方法时),拦截错误并执行指定的逻辑,返回一个跟源Observable相同类型的结果,最后回调订阅者的onComplete方法

onErrorReturnItem 在错误或异常发生时返回一个跟源Observable相同类型的项目

onExceptionResumeNext 与onErrorResumeNext操作符类似,不同的地方在于onErrorResumeNext操作符是当Observable发生错误或异常时触发,而onExceptionResumeNext是当Observable发生异常时才触发。

    private static void rxCatch() {
        Observable
                .interval(500, TimeUnit.MILLISECONDS)
                .map(new Function() {

                    @Override
                    public Long apply(@NonNull Long aLong) throws Exception {
                        if (aLong == 3) return null;
                        return (aLong + 1) * 100;
                    }
                })
                .onErrorReturnItem(1000L)
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Long aLong) throws Exception {
                        System.out.println("onNext: " + aLong);
                    }
                });
        while (true);
    }

输出结果:

onNext: 100
onNext: 200
onNext: 300
onNext: 1000

Retry —如果Observable发生错误,重新订阅它,如果经过n次重新尝试执行后仍然出现错误或者异常,则最后回调执行onError方法。

    private static void rxRetry() {
        Observable.interval(500, TimeUnit.MILLISECONDS)
                .map(new Function() {

                    @Override
                    public Long apply(@NonNull Long aLong) throws Exception {
                        if (aLong == 3) return null;
                        return (aLong + 1) * 100;
                    }
                })
                .retry(3)
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Long aLong) throws Exception {
                        System.out.println("onNext: " + aLong);
                    }
                });
        while (true);
    }

输出结果:

onNext: 100
onNext: 200
onNext: 300

onNext: 100
onNext: 200
onNext: 300

onNext: 100
onNext: 200
onNext: 300

onNext: 100
onNext: 200
onNext: 300

你可能感兴趣的:(Rxjava2 操作符 - Error Handling)