[RxJS] Starting a Stream with SwitchMap & switchMapTo
From an event map to another event we can use switchMap(), switchMap() accept an function which return an obervable.
The following code: When you click the button, it will start a interval to console out the count...
const Observable = Rx.Observable; const startButton = document.querySelector('#start'); const start$ = Rx.Observable.fromEvent(startButton, 'click'); const interval$ = Observable.interval(400); const startInterval$ = start$.switchMap( () => { return interval$; }); startInterval$.subscribe( (x) => { console.log(x); });
So the start$ switch map to a interval$ to avoid writting the nested subscribe function.
switchMap() actually is pretty useful when dealing with http event stream, it can help to cancel the previous http call.
switchMapTo(): which accept an observable:
/* const startInterval$ = start$.switchMap( () => { return interval$; });*/ const startInterval$ = start$.switchMapTo( interval$ );
Tow pieces of code, works the same way.