首页 > 解决方案 > 为什么在范围运算符中使用 asyncScheduler 关键字会推迟订阅?

问题描述

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

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

当然,删除asyncScheduler关键字会取消这种反向显示。

为什么显示反转?

标签: rxjs

解决方案


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

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


推荐阅读