Use case of Observable .do() operator (rxjs)
Solution 1
Update
Now it's pipe( tap(...), )
instead of do()
Original
.do()
is to execute code for each event. A difference to .map()
is, that the return value of .do()
is ignored and doesn't change what value the subscriber receives.
Solution 2
Now it's pipe( tap(...), )
instead of do()
const source = of(1, 2, 3, 4);
source.pipe(
tap(val => console.log('I am tap: ',val)),
filter(val => val > 2),
map(val => val + 1)).subscribe((val) => {
console.log('I am subscriber value after filtering: ', val);
});
Output:
I am tap: 1
I am tap: 2
I am tap: 3
I am subscriber value after filtering: 4
I am tap: 4
I am subscriber value after filtering: 5
*Tap operator doesn't modify anything, you can say that it is just to view the stream.
Related videos on Youtube
soywod
Updated on February 27, 2020Comments
-
soywod about 4 years
Context :
I'm building an angular 2 app (with a Firebase API). I'm using the AngularFire module. I was wondering how I can mix the
canActivate
method with the AngularFire auth Observable, and I found this post. The answer is to make thecanActivate
method returns anObservable<boolean>
:canActivate(): Observable<boolean> { return this.auth .take(1) .map((authState: FirebaseAuthState) => !!authState) .do(authenticated => { if (!authenticated) this.router.navigate(['/login']); }); }
It's the first time I see the Observable
do
operator, and I can't understand what it really does ? The official doc didnt help me, and I didn't found decent examples.Question:
Can someone bring here some examples of
.do()
usage ? And difference with.subscribe()
? -
soywod over 7 yearsOK I see, it's for doing some treatment without modify the stream. But I don't get why this work without a
subscribe
? Doesdo
do the same ? Can you give me some examples ? Thx for your reply anyway -
JB Nizet over 7 years@Soywod There is a subscribe: just not in your code. The router subscribes to the observable returned by your guard, to know if it can activate or not.
-
codemonkey over 6 yearsSo am I correct in saying that the side effect in the do() call will get executed after the router Subscriber function ?
-
Günter Zöchbauer over 6 years@user2153465
router.navigate
will be called when the observable returned bythis.auth
emits the first value. -
Franki1986 almost 5 yearsCan I use an observable wit do without sharing the observable?
-
Günter Zöchbauer almost 5 years@Franki1986 sure, but you need to
subscribe()
otherwise the executable won't do anything and also not calldo(...)
. -
Kiran Dash over 4 yearsHi @GünterZöchbauer. Is
do
operator still present inRxJS
. I was going through the documentaion today and could not find it. If it is removed, is there any replacement for this operator. -
Günter Zöchbauer over 4 yearsIt's
tap()
now