rxjs - 为什么在范围运算符中使用 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
关键字会取消这种反向显示。
为什么显示反转?
解决方案
使用asyncScheduler
不会推迟订阅。它只会使所有发射异步发射(就像用 包装每个发射一样next()
)setTimeout()
。
RxJS 是严格同步的,除非您使用时间或自己使用异步调度程序。因此,当您使用range(1, 50)
它时,它将在同一事件中同步发出所有值,然后任何发射asyncScheduler
都可以到达其观察者。所有 50 个next
排放都堆叠在事件队列中,等待当前事件结束。
推荐阅读
- opengl - 如何将顶点缓冲区绑定到 Gfx-rs 中的统一数组?
- sql - SQL SELECT 日期的多个最大值
- php - 如何通过使用同一数据库中的另一个表进行选择来创建表的 mysql 联合
- python-3.x - 带有 uwsgi 的 Flask-APScheduler 在测试时有效,但在通过 systemd 服务部署时无效
- r - 使用任何应用方法来查找每个学生的最高和最低分数之间的差异
- javascript - 如何在javascript中的(多项选择)答案之间插入一个中断?
- c++ - 如何使用 OpenCV C++ 加载 Yolo 对象检测网络
- postgresql - 在 postgresql 中选择查询变得非常非常慢
- bash - Bash / Git - 如何使用当前 git 分支名称制作脚本
- android - 为什么在 layout_height="wrap_content" 中忽略卡片高度?