Rxjava2 doAfterNext

690 阅读1分钟

doAfterNext操作符的作用是每次调用onNext方法就会调用。

 Observable.fromArray("1", "2", "3", "3", "4").doAfterNext(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                System.out.println("doAfterNext: " + s);
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                System.out.println("subscribe: " + s);
            }
        });

输出

subscribe: 1
doAfterNext: 1
subscribe: 2
doAfterNext: 2
subscribe: 3
doAfterNext: 3
subscribe: 3
doAfterNext: 3
subscribe: 4
doAfterNext: 4

看看源码

 public final Observable<T> doAfterNext(Consumer<? super T> onAfterNext) {
        ...
        return RxJavaPlugins.onAssembly(new ObservableDoAfterNext<T>(this, onAfterNext));
    }
    

所以每次调用ObservableDoAfterNext类中onNext方法,就会调用 onAfterNext.accept(t);

 public void onNext(T t) {
            downstream.onNext(t);

            if (sourceMode == NONE) {
                try {
                    onAfterNext.accept(t);
                } catch (Throwable ex) {
                    fail(ex);
                }
            }
        }