Demo: concatAll
The concatAll operator executes the incoming observables strictly one after the other in the same sequence as they have arrived.
Hence, the output of these observables never overlap on each other and look concatinated back to back.
const source = timer(0,2000).pipe(take(3));
const countTill2Task = timer(300,1500).pipe(take(3));
//Each data from source, maps to a countTill2Task
const process = source
.pipe(map(v => this.countTill2Task))
.pipe(concatAll());
//concatAll runs the incoming observable strictly in the sequence of their arrival
const output = process.subscribe(v=>console.log(v))