Почему использование ключевого слова asyncScheduler в операторе диапазона откладывает подписку? - PullRequest
1 голос
/ 27 мая 2020

При запуске следующего исходного кода в приложении Angular сначала отображаются операторы регистратора 50 Normal: и только затем отображаются операторы регистратора 50 Scheduler:.

range(1, 50, asyncScheduler).subscribe((value: number) => console.log('Scheduler: ' + value));
range(1, 50).subscribe((value: number) => console.log('Noraml: ' + value));

Конечно , удаление ключевого слова asyncScheduler отменяет обратное отображение.

Почему это отображение перевернуто?

1 Ответ

2 голосов
/ 27 мая 2020

Использование asyncScheduler не откладывает подписку. Он только заставляет все выбросы испускаться асинхронно (точно так же, как обертывание каждого next() с setTimeout()).

Rx JS строго синхронно, если вы не работаете со временем или не используете асинхронный планировщик самостоятельно. Поэтому, когда вы используете range(1, 50), он будет излучать все значения синхронно в одном и том же событии, прежде чем любое излучение из asyncScheduler сможет достичь своего наблюдателя. Все 50 next выбросов складываются в очередь событий, ожидая окончания текущего события.

...