In which cases I should use doOnNext, and in which cases doOnEach?
.doOnEach(new Action1<Notification<? super MessageProfile>>() { @Override public void call(Notification<? super MessageProfile> notification) { } }) .doOnNext(new Action1<MessageProfile>() { @Override public void call(MessageProfile profile) { messageProfileDao.save(profile); } })
This looks like the both operators have the same effect.
doOnNext operator called every time when source Observable emits an item. It can be used for debugging purposes, applying some action to the emitted item, logging, etc... Observable. range(1, 3) .
1. Since doOnNext provides you the element flowing through the pipeline with a Consumer , it is after. Order is something like this: source emits item -> doOnNext lambda is triggered -> subscriber onNext is called: github.com/reactor/reactor-core/blob/master/reactor-core/src/…
They are indeed quite close. One thing that differs (and it's maybe not that clear in the javadoc actually, more visible in sourcecode) is that in doOnEach, you also get Notification
wrappers for errors and completion event.
You can then check isOnNext
, isOnCompleted
or isOnError
to check the actual kind of event you got a notification for.
So one Action.call
to rule them all, instead of a fully fledged Observer
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With