RxJS Observable.Interval的多个订阅

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); 
    }); 
})(); 

http://jsfiddle.net/9EjSQ/43/

请注意,您不需要调用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) 
) 

http://jsfiddle.net/9EjSQ/44/