VirtualTimeScheduler和TestScheduler有什么区别?

时间:2019-05-02 13:38:09

标签: rxjs rxjs6

我在Rxjs中看到测试有时TestScheduler,有时VirtualTimeScheduler。 您能解释一下有什么区别,我应该在哪里使用?

declare const rxTestScheduler: TestScheduler;
const scheduler = new VirtualTimeScheduler();

1 个答案:

答案 0 :(得分:2)

VirtualTimeScheduler是一个不使用实时的调度程序,通过创建事件的有序列表,您可以使用需要实时工作的Observable和运算符。然后,您可以刷新所有排队的事件,然后将它们依次处理。

例如,当您使用delay时:

import { of, VirtualTimeScheduler } from 'rxjs'; 
import { delay } from 'rxjs/operators';

const scheduler = new VirtualTimeScheduler();

of(1).pipe(
  delay(100000, scheduler),
).subscribe(console.log);

scheduler.flush();

实时演示:https://stackblitz.com/edit/rxjs-zcmxg1

请注意,即使使用100000,您也不会真正等待100秒,结果是立竿见影的。您可能永远不需要自己使用VirtualTimeScheduler(或者至少我从未见过任何用例)。

然后,TestScheduler仅扩展了VirtualTimeScheduler,并提供了一些其他处理大理石图的方法。