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

标签 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

最佳答案

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/

相关文章:

rxjs - 错误 TS2339 : Property 'filter' does not exist on type 'Observable<Event>'

javascript - Angular ckeditor 额外插件给出错误

javascript - 以某种方式使用 CSS 引用哈希值

javascript - mustache 在不使用索引名称的情况下模板化对象

ajax - Angular 2/4 & RxJS - forEach 内的订阅 - 确保流量控制在所有 Observable 完成之前不会继续

javascript - 将订阅者捆绑到进行中的异步请求 - RxJS

javascript - 带暂停和恢复轮询的 Rxjs 计时器

javascript - AngularJS 只显示一个 ng-switch

javascript - 如何避免使用 Object.assign?

rx-java - RxJava Observable 基于内容的缓冲区