Rxjs 为什么在范围运算符中使用asyncScheduler关键字会推迟订阅?
在Angular应用程序中运行以下源代码时,首先显示50Rxjs 为什么在范围运算符中使用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)); 当然
Normal:
logger语句,然后才显示50Scheduler:
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
排放堆积在事件队列中,等待当前事件结束