2015-12-03 178 views
3

在RxJS中,如何在創建後更改間隔設置?創建後更改觀察值的間隔/設置

到目前爲止,我有這一點,但它不工作

var observable = Rx.Observable.interval(500) 
    .map(function (data) { return "Hello World " + data; }); 

observable.subscribe(console.log); 

setTimeout(function() { 
    observable.interval(3000); 
}, 3000); 

它說: 「類型錯誤:observable.interval是不是sixage.js功能:10:14」

jsbin

編輯

這是用公認的答案後的最終產品。

var intervalUpdateS = new Rx.Subject(); 
var observable = intervalUpdateS.startWith(500).flatMapLatest(function(intvl){ 
    return Rx.Observable.interval(intvl); 
}) 
.map (function (data) { return "Hello World " + data; }); 

observable.subscribe(function (msg) { 
    console.log(msg); 
}); 

setTimeout(function() { 
    intervalUpdateS.onNext(3000) 
}, 3000); 

jsbin

回答

3

interval被限定在 '類' Rx.Observable,而不是在原型水平,即不上Rx.Observable每個實例。因此,在可觀察的實例上的observable.interval肯定會給你那個錯誤。

如果您是間隔修改的來源,我只能想到使用主題推送您的修改。這將工作方式:

var intervalUpdateS = new Rx.Subject(); 
var observable = intervalUpdateS.flatMapLatest(function(intvl){ 
    return Rx.Observable.interval(intvl); 
}) 
.map (function (data) { return "Hello World " + data; }); 

然後你改變時間間隔與intervalUpdateS.onNext(newValue);

沒有測試過,但希望將正常運行是。

關於主題:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/subjects.md

關於flatMap:http://reactivex.io/documentation/operators/flatmap.htmlWhy we need to use flatMap?

+0

非常感謝它的工作很大的,因爲它是。 – John