gpt4 book ai didi

javascript - 为什么可观察性重新订阅热门

转载 作者:太空宇宙 更新时间:2023-11-04 16:09:01 25 4
gpt4 key购买 nike

我有一个监听表选择事件的可观察对象,它也很热门。

代码片段:

  const oTableRowSelect$ = TableOb.rowSelectionChangeEvent$(this.getById("ins-table"));
const test = oTableRowSelect$
.do(function () {
console.log("resubscribe");
})
.map(function () {
return 4;
});

test.subscribe(function (o) {
console.log("Select1" + o);
});

test.subscribe(function (o) {
console.log("Select2" + o)
});

如您所见,有两个订阅者监听该事件。所以结果应该分享给所有订阅者,这就是所谓的重播效果。

我得到的输出是: enter image description here

但我期望 resubscribe 输出仅一次。我做错了什么?

最佳答案

虽然您的oTableRowSelect$可能热门并共享,但它仅在您使用其他运算符以某种方式扩展它的部分共享(在您的情况下) domap)。

在 RxJS 中,任何通过运算符的扩展基本上都会返回一个“new”流。为了使这个"new"流成为热门/共享,您必须应用一个使其成为热门的运算符(sharepublishpublishReplay 等...)

const hotBaseStream$ = new Rx.BehaviorSubject("Hi!");

const test = hotBaseStream$
// -------- below this line you get a "new" stream, that is not hot any more
.do(() => console.log("resubscribe"))
.map(() => 4)
.publishReplay().refCount(); // remove this part and you will have back your original behavior

test.subscribe(function (o) {
console.log("Select1 ", o);
});

test.subscribe(function (o) {
console.log("Select2 ", o)
});
<script src="https://unpkg.com/@reactivex/rxjs/dist/global/Rx.js"></script>

关于javascript - 为什么可观察性重新订阅热门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41654617/

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