Rxjs 为什么在范围运算符中使用asyncScheduler关键字会推迟订阅?

Rxjs 为什么在范围运算符中使用asyncScheduler关键字会推迟订阅?,rxjs,Rxjs,在Angular应用程序中运行以下源代码时,首先显示50Normal:logger语句,然后才显示50Scheduler:logger语句 range(1, 50, asyncScheduler).subscribe((value: number) => console.log('Scheduler: ' + value)); range(1, 50).subscribe((value: number) => console.log('Noraml: ' + value)); 当然

在Angular应用程序中运行以下源代码时,首先显示50
Normal:
logger语句,然后才显示50
Scheduler:
logger语句

range(1, 50, asyncScheduler).subscribe((value: number) => console.log('Scheduler: ' + value));
range(1, 50).subscribe((value: number) => console.log('Noraml: ' + value));
当然,删除
asyncScheduler
关键字将取消此反向显示


为什么要反转显示?

使用
asyncScheduler
不会推迟订阅。它仅使所有发射异步发射(就像用
setTimeout()
包装每个
next()

RxJS是严格同步的,除非您自己使用时间或异步调度器。因此,当您使用
range(1,50)
时,它将在
asyncScheduler
的任何发射到达其观察者之前,在同一事件中同步发射所有值。所有50个
next
排放堆积在事件队列中,等待当前事件结束