2016-08-18 37 views

回答

6

&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(); 

還有一些其他更多的情況下,我們也想改變時間的流動。例如,如果我們在遊戲的背景下進行操作,我們可能希望將我們的日程安排連接到​​或其他一些虛擬時間尺度,這需要使用諸如AnimationFrameSchedulerVirtualTimeScheduler之類的東西。


相關問題