重学 Rxjs —— Scheduler

539 阅读2分钟

「这是我参与2022首次更文挑战的第34天,活动详情查看:2022首次更文挑战

调度器是 Rxjs 比较高级的内容,其实我在实际开发中也没使用过这部分,因此本文不做深入介绍,只是来了解一下调度器是什么,看一下 Rxjs 中常见的调度器种类。

数据是以怎样形式发出去是由调度器决定的,因此虽然我们之前的程序中没有显式指明调度器类型,Rxjs 在内部也为我们选择了合适的调度器,在其内部有一个最小并发原则的机制,对于少量数据不使用调度器,对于潜在的返回大量或无限数据的场景选择使用 queue 调度器,对于使用定时器的场景应用 async 调度器。

在很多创建方法或者操作符中都可以接收调度器作为参数,这样我们可以为其显式指明调度器的选择,此外之前还见过 subscribeOn 和 observeOn 操作符,它们是用来专门处理调度器逻辑的。

接下来看一下 Rxjs 内部的调度器类型,

null

null 即不使用调度器,这样的数据会以同步递归的形式发出去,可以用于定时或尾递归的操作。

queue

指的是队列调度,也成为蹦床调度器,会同步调度给到的任务,将其全部放在队列中,然后等待一个任务完成后继续执行下一个,可以用在迭代的场景。

asap

这一种是微任务调度,我们都知道在 JS 引擎中,微任务的调度优先级是最高的,这里可以带来最快速的调度效果,用于处理异步行为。

async

async 的调度使用的是 setInterval,因此这种调度是基于时间来进行的,它是通过普通的时间循环队列调度,优先级低于 asap。

animationFrame

这种调度器使用 requestAnimationFrame 作为调度机制,因此可以用在浏览器动画绘制等场景,它的特点是有更好的流畅性。

上面就是几种常见的调度器介绍,另外补充一点,在最新版本 Rxjs 中推荐使用 scheduled 来添加调度器。