Rxjs:您希望使用调度程序的场景

bla*_*awk 2 javascript scheduler reactive-programming rxjs rxjs5

我不明白rxjs文档中调度程序的含义是什么,所以我试图通过它有用的场景来理解,所以我可以理解调度程序

pau*_*els 9

&tldr;

在大多数情况下,Schedulers如果只有90%的情况下默认是正常的话,你永远不需要关心自己.

说明

A Scheduler只是一种在使用RxJS时标准化时间的方法.它有效地安排事件在将来的某个时间发生.

我们通过使用该schedule方法来排队调度程序将来执行的新操作.如何Scheduler做到这一点完全取决于执行.通常只是选择最有效的方法来执行未来的行动.

举一个简单的例子,我们使用timer运算符在将来的某个时间执行一个动作.

var source = Observable.timer(500);
Run Code Online (Sandbox Code Playgroud)

这是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();
Run Code Online (Sandbox Code Playgroud)

还有一些其他更多的角落案例,我们也希望改变时间流.例如,如果我们在游戏的上下文中操作,我们可能希望将我们的日程安排与requestAnimationFrame其他虚拟时间尺度相关联,这将需要使用像AnimationFrameScheduler或者这样的东西VirtualTimeScheduler.