RxJS Observable.Interval的多个订阅
问题描述:
RxJS有没有类似下面的解决方案? Is it possible to invoke subscribers's OnNexts on different threads in Rx?RxJS Observable.Interval的多个订阅
P.S.我的第一个,幼稚的做法(在CoffeeScript中)显然已经失败:
hObs = Rx.Observable.interval(35000)
.startWith(-1)
.select(moment().format("D MMMM, HH:mm:ss"))
.publish()
hObs.subscribe((x)->console.log(x))
hObs.connect()
hObs.subscribe((x)->console.log(x, 1))
hObs.connect()
第二定制返回没有为35秒的间隔,等等
答
的.select
预期的功能,而不是一个值。以下作品:
(function() {
var list = document.getElementById("list");
var stream = Rx.Observable.interval(35000)
.startWith(-1)
.select(function(){ return moment().format("D MMMM, HH:mm:ss") });
stream.subscribe(function(value) {
var li = document.createElement("li");
li.innerHTML = "subscriber 1: "+value;
list.appendChild(li);
});
stream.subscribe(function(value) {
var li = document.createElement("li");
li.innerHTML = "subscriber 2: "+value;
list.appendChild(li);
});
})();
请注意,您不需要调用connect()
两次,通常你怎么称呼它只有一次。通过在可观察链的末尾调用.publish().refCount()
来更好地使用“自动”connect()
。这将创建一个ConnectableObservable,换句话说就是一个“热点可观察”(请参阅https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/creating.md#cold-vs-hot-observables)。在这种情况下,我们不需要热点观察。
在CoffeeScript的:
list = document.getElementById("list")
stream = Rx.Observable.interval(35000)
.startWith(-1)
.select(-> moment().format("D MMMM, HH:mm:ss"))
stream.subscribe((value) ->
li = document.createElement("li")
li.innerHTML = "subscriber 1: " + value
list.appendChild(li)
)
stream.subscribe((value) ->
li = document.createElement("li")
li.innerHTML = "subscriber 2: " + value
list.appendChild(li)
)