gpt4 book ai didi

javascript - Observable.Interval 的 RxJS 多重订阅

转载 作者:数据小太阳 更新时间:2023-10-29 05:23:36 27 4
gpt4 key购买 nike

对于 RxJS 是否有类似以下解决方案的解决方案? Is it possible to invoke subscribers's OnNexts on different threads in Rx?

附言我的第一个天真的方法(在 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/

关于javascript - Observable.Interval 的 RxJS 多重订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12179795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com