Это потому, что RxJS по умолчанию для асинхронных действий использует функции setTimeout
и setInterval
, которые не гарантируют, что они достигнут именно того времени ожидания, которое вы хотите.
Так что, если вы используете тайм-ауты 5000
и 1000
, тогда не гарантируется, какое из действий произойдет первым через 5 с. Иногда внешний Observable излучает первым, а иногда внутренний излучает первым, но switchMap
ничего не может с этим поделать.
Вы можете видеть, как разное время может быть, например. это:
const start = new Date().getTime();
setInterval(() => console.log(new Date().getTime() - start), 1000);
Демонстрация в реальном времени: https://stackblitz.com/edit/typescript-urep5j
1004
2001
3002
4000
4998
...
Так что иногда задержка составляет 1004
, а иногда просто 998
.