RxJS对Observable.Interval的多个订阅

Dan*_*l K 6 javascript reactive-extensions-js rxjs

有没有像RxJS那样的解决方案? 是否可以在Rx中的不同线程上调用订阅者的OnNexts?

PS我的第一个天真的方法(在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() 
Run Code Online (Sandbox Code Playgroud)

第二个订阅在35秒间隔内不返回任何内容,依此类推

And*_*ltz 5

.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); 
    });
})();
Run Code Online (Sandbox Code Playgroud)

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

请注意,您不需要调用connect()两次,通常只调用一次.最好connect()通过.publish().refCount()在可观察链的末尾调用来使用"自动" .这将创建一个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)
)
Run Code Online (Sandbox Code Playgroud)

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