在 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
Edit:
这是使用已接受的答案后的最终产品。
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
interval
是在“类”上定义的Rx.Observable
,不是在原型级别,即不是在每个实例上Rx.Observable
. So 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
关于平面地图:http://reactivex.io/documentation/operators/flatmap.html, and 为什么我们需要使用 flatMap?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)