【问题标题】:Change Interval/settings of observable after creation创建后更改可观察对象的间隔/设置
【发布时间】:2015-12-03 05:18:25
【问题描述】:

在 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 is not a function at 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

【问题讨论】:

    标签: javascript observable rxjs reactivex


    【解决方案1】:

    interval 是在“类”Rx.Observable 上定义的,而不是在原型级别,即不是在 Rx.Observable 的每个实例上。所以 observable.interval 在 observable 实例上肯定会给你这个错误。

    如果你是修改区间的来源,我只能想用一个主题来推送你的修改。这样就可以了:

    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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多