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

在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

解决方法:

间隔是在“类”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?

上一篇:JAVASE多线程基础


下一篇:How to Connect to Dynamics 365 Data from PowerBI Desktop