2015-12-03 2 views
3

В 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

ответ

3

interval определяется на 'класс' 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.html и Why we need to use flatMap?

+0

спасибо он работал большим, как это было. – John

Смежные вопросы