Когда мы используем mergeMap, все внутренние наблюдаемые подписываются сразу после их создания, поэтому мы не получаем увеличения временных промежутков, потому что interval
испускает каждую секунду , поэтому все внутренние наблюдаемые имеют право подписки после того, как источник выбрасывает:
source.pipe(
mergeMap(num => of(num).pipe(
delay(num * 1000)
)
)
emits 1 after 1 sec., inner waits 1 sec
emits 2 after 1 sec., inner waits 2 sec (1 sec already passed)
emits 3 after 1 sec., inner waits 3 sec (2 secs already passed)
Но с concatMap
внутренние не подписаны, пока не завершится предыдущий:
source.pipe(
concatMap(num => of(num).pipe(
delay(num * 1000)
)
)
Пример песочницы