2017-03-16 146 views
2

默認調度行爲在RxJS4,下面的代碼將凍結您的環境:困惑在RxJS5

Rx.Observable.of(10) 
    .repeat() 
    .take(1) 
    .subscribe(value => { 
    console.log(value); 
    }); 

這是因爲它會要求立即調度運行repeat,並永遠不會take。現在在RxJS5中沒有即時調度程序,但是如果我運行相同的代碼,一切都按預期工作。我們正在運行什麼改變和調度程序?我認爲默認情況下默認爲沒有調度程序,如果我理解正確,那麼也會凍結repeat

回答

1

RxJS 5中的默認調度程序是同步的 - 以前稱爲immediate。

(底部的 this page).

在RxJS 4默認調度不直接

,它的「默認」,這是現在所謂的「儘快」 - 基本上是安排在microtask隊列

語義這應該工作。不管你使用的是什麼調度器,也就是說,它應該在4中工作。你有一個10的無限源碼流,你取其中一個然後取消訂閱。這觸發了內部訂閱repeat()被處置,打破你的無限循環。它可能是4中的一個bug?