💡 If you need to consider the emitted value from the source, try switchMap
!
Example 1: Restart countdown on click, until countdown completes one time
( StackBlitz )
// RxJS v6+import { interval, fromEvent } from 'rxjs';import {switchMapTo,scan,startWith,takeWhile,finalize} from 'rxjs/operators';const COUNTDOWN_TIME = 10;// referenceconst countdownElem = document.getElementById('countdown');// streamsconst click$ = fromEvent(document, 'click');const countdown$ = interval(1000).pipe(scan((acc, _) => --acc, COUNTDOWN_TIME),startWith(COUNTDOWN_TIME));click$.pipe(switchMapTo(countdown$),takeWhile(val => val >= 0),finalize(() => (countdownElem.innerHTML = "We're done here!"))).subscribe((val: any) => (countdownElem.innerHTML = val));
switchMapTo 📰 - Official docs
📁 Source Code: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/switchMapTo.ts