&tldr;
在大多数情况下,您永远不需要关心Schedulers,只要 90% 的情况下默认设置就可以了。
说明
Scheduler 只是在使用 RxJS 时标准化时间的一种方式。它有效地安排在未来某个时间发生的事件。
我们通过使用schedule 方法来将调度程序将来执行的新操作排队。 Scheduler 如何做到这一点完全取决于实现。虽然通常只是选择最有效的方式来执行未来的行动。
举一个简单的例子,我们使用timer 运算符在未来的某个时间执行一个动作。
var source = Observable.timer(500);
这是 RxJS 的标准票价。当您提出问题时,Scheduler 会出现,500 是什么意思?在默认情况下,它将等于 500 毫秒,因为这是约定的内容,也是默认的 Scheduler 将执行的操作,它将等待 500 毫秒,然后发出一个事件。
但是,在某些情况下,我们可能不希望时间流正常运行。最常见的用例是我们在测试时。我们实际上不想等待 500 毫秒来完成任务,否则我们的测试套件将需要很长时间才能真正完成!
在这种情况下,我们实际上希望控制时间流,这样我们就不必等待 500 毫秒才能验证流的结果。在这种情况下,我们可以使用TestScheduler,它可以同步执行任务,这样我们就不必处理任何异步混乱。
let scheduler = new TestScheduler();
//Overrides the default scheduler with the default scheduler
let source = Observable.timer(500, scheduler);
//Subscribe to the source, which behaves normally
source.subscribe(x => expect(x).to.be(0));
//When this gets called all pending actions get executed.
scheduler.flush();
还有一些其他更极端的情况,我们也想改变时间的流动。例如,如果我们在游戏的上下文中运行,我们可能希望将我们的日程安排与requestAnimationFrame 或其他一些虚假时间尺度相关联,这将需要使用类似AnimationFrameScheduler 或VirtualTimeScheduler 之类的东西.