在 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 处的函数”
编辑:
这是使用已接受的答案后的最终产品。
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);
最佳答案
interval
是在“类”Rx.Observable
上定义的,而不是在原型(prototype)级别,即不是在 Rx.Observable
的每个实例上>。因此,可观察实例上的 observable.interval
肯定会给您该错误。
如果你是区间的修改源,我只能想到用一个subject来推送你的修改。这将以这种方式工作:
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
关于平面 map :http://reactivex.io/documentation/operators/flatmap.html , 和 Why we need to use flatMap?
关于javascript - 创建后更改可观察对象的间隔/设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34058398/