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

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

4

1 回答 1

3

interval是在 'class' 上定义的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.html ,以及为什么我们需要使用 flatMap?

于 2015-12-03T13:52:01.787 回答