Demo: delayWhen
The delayWhen is very similar to delay, except that the emittance from an inner observable controls the delay period.
delayWhen(() => innerObservable);
//Emit items every 1 sec, starting at 0.5 sec
let input = timer(500,1000).pipe(take(6));
//Delay the emittance of each incoming item by 2 sec
let process = delayWhen(() => timer(2000));
let output=input.pipe(process).subscribe(v=>console.log(v))