Rxjava2(四)功能操作符

本文详细介绍了RxJava中常用的操作符,包括delay、doOnEach、doOnNext、doAfterNext、doOnComplete、doOnError等,展示了如何通过这些操作符在事件的不同生命周期阶段进行干预。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.delay

作用
使得被观察者延迟一段时间再发送事件

private void delay() {
    Observable.just(1,2,3,4)
            .delay(5,TimeUnit.SECONDS)
            .subscribe(new Consumer<Integer>() {
                @Override
                public void accept(Integer integer) throws Exception {
                    LogUtils.syso("====延时发送reslut===="+integer);
                }
            });
}

 在事件的生命周期中操作

  • 需求场景
    在事件发送 & 接收的整个生命周期过程中进行操作

如发送事件前的初始化、发送事件后的回调请求等

2.doOnEach

当observable每发送一次数据事件就会调用一次,其中包含onNext onError onComplete

    Observable.just(1,2,3,4)
           .doOnEach(new Consumer<Notification<Integer>>() {
               @Override
               public void accept(Notification<Integer> integerNotification) throws Exception {
                   LogUtils.syso("===================");
               }
           }).subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Exception {
            LogUtils.syso("=====result====="+integer);
        }
    });
}

3.doOnNext

执行onNext()之前调用

Observable.just(1,2,3,4)
        .doOnNext(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        LogUtils.syso("======onNext前调用======");
    }
}). subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        LogUtils.syso("=====result====="+integer);
    }
});

4.doAfterNext后调用

   Observable.just(1,2,3,4)
            .doAfterNext(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Exception {
            LogUtils.syso("======onNext后调用======");
        }
    }). subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Exception {
            LogUtils.syso("=====result====="+integer);
        }
    });
}

5.doOnComplete

Observable正常发送事件完毕后调用

Observable.just(1,2,3,4)
        .doOnComplete(new Action() {
            @Override
            public void run() throws Exception {
                LogUtils.syso("======Observable正常发送事件完毕后调用==========");
            }
        }). subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        LogUtils.syso("=====result====="+integer);
    }
});

6.doOnError

发送错误事件时候调用

Observable.create(new ObservableOnSubscribe<Integer>() {
    @Override
    public void subscribe(ObservableEmitter<Integer> e) throws Exception {
        e.onNext(1);
        e.onNext(2);
        e.onError(new NullPointerException());
        e.onComplete();
    }
}) .doOnError(new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
                LogUtils.syso("===========发送错误事件的时候调用===="+throwable.getMessage());
            }
        }). subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        LogUtils.syso("=====result====="+integer);
    }
});

其他do操作符

Observable.create(new ObservableOnSubscribe<Integer>() {
    @Override
    public void subscribe(ObservableEmitter<Integer> e) throws Exception {
        e.onNext(1);
        e.onNext(2);
        e.onComplete();
    }
}) // 6. 观察者订阅时调用
        .doOnSubscribe(new Consumer<Disposable>() {
            @Override
            public void accept(@NonNull Disposable disposable) throws Exception {
                LogUtils.syso("=====doOnSubscribe=====");
            }
        })
        // 7. Observable发送事件完毕后调用,无论正常发送完毕 / 异常终止
        .doAfterTerminate(new Action() {
            @Override
            public void run() throws Exception {
                LogUtils.syso("=====doAfterTerminate=====");
            }
        })
        // 8. 最后执行
        .doFinally(new Action() {
            @Override
            public void run() throws Exception {
                LogUtils.syso("=====doFinally===最后执行==");
            }
        })
       .subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        LogUtils.syso("=====result====="+integer);
    }
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值