创建后更改可观察的间隔/设置

时间:2015-12-03 05:18:26

标签: javascript observable rxjs reactivex

在RxJS中,如何在创建后更改间隔设置?

到目前为止,我有这个,但它不起作用

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

observable.subscribe(console.log);

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

它说“TypeError: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

1 个答案:

答案 0 :(得分: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);

更改间隔

Haven未经过测试,但希望能够按原样运作。

关于主题: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?