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
一些额外的方法来处理弹珠图。
我在 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
一些额外的方法来处理弹珠图。