Я пытаюсь понять вывод следующего кода консоли.Я ожидал, что он будет поддерживать лог 0–9 каждые 500 мс, а затем снова начинать с 0 (и заканчивать с 9).
Но дело в том, что в первый раз консольный журнал будет 0-9,и затем выходной сигнал стал 0 - 8, с 1-секундной паузой на 8, а затем начните снова с 0.
Мой вопрос
- Почему 9 появился только один раз?
- Почему на 8 секунд приходится 1 секунда (вместо 500 мс)?
Поскольку исходная наблюдаемая излучает каждые 5 секунд, а внутренняя наблюдаемая - каждые 500 мс, времени должно быть достаточно длявнутренняя наблюдаемая, чтобы испускать от 0 до 9, и она не должна останавливаться на 8.
Вот тот же код на stackblitz: https://stackblitz.com/edit/typescript-eb62ap?file=index.ts&devtoolsheight=100
// RxJS v6+
import { timer, interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';
//emit immediately, then every 5s
const source = timer(0, 5000);
//switch to new inner observable when source emits, emit items that are emitted
const example = source.pipe(switchMap(() => interval(500)));
//output: 0,1,2,3,4,5,6,7,8,9...0,1,2,3,4,5,6,7,8
const subscribe = example.subscribe(val => console.log(val));