VirtualTimeScheduler 和 TestScheduler 有什么区别?

What's the difference between VirtualTimeScheduler and TestScheduler?

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

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

VirtualTimeScheduler 是一个不使用实时的调度程序,它允许您通过创建有序的事件列表来使用需要实时处理的 Observables 和运算符。然后你可以刷新所有排队的事件,它们将一个接一个地处理。

例如当您使用 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 一些额外的方法来处理弹珠图。