2015-12-03 146 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