gpt4 book ai didi

javascript - RxJS:在另一个订阅后明显中断

转载 作者:行者123 更新时间:2023-11-30 20:43:50 26 4
gpt4 key购买 nike

我对 distinct 运算符感到困惑。据我了解,它应该只从源流中产生唯一的值。在我的例子中有两个流。第二个使用 distinct 来防止产生重复值,但在另一个订阅之后再次产生新的(不是唯一的)项目。我很困惑为什么会这样。

const s1 = new Rx.Subject()
const s2 = s1.distinct().do(num => console.log(num))

a1 = s2.subscribe()
s1.next(1)
s1.next(1) // no produced because `distinct`
a2 = s2.subscribe()
s1.next(1) // produced, but why?
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.min.js"></script>

最佳答案

这是预期的行为,因为如果您为主题创建新订阅,新创建的订阅没有初始值。如果您发射下一个项目,它会发射到新订阅,因为 undefined != 1

如果您想要实现仅在值更改时才向所有订阅发出的行为,您必须使用 share 运算符。

这是一个例子:

const s1 = new Rx.Subject()
const notShared = s1
.distinct();
const shared = notShared
.share();

notShared.subscribe(_ => console.log('subscription 1:', _));
s1.next(1)
s1.next(1)
notShared.subscribe(_ => console.log('subscription 2:', _));
s1.next(1)
s1.next(1)

console.log('_'.repeat(30));
shared.subscribe(_ => console.log('shared subscription 1:', _));
s1.next(1)
s1.next(1)
shared.subscribe(_ => console.log('shared subscription 2:', _));
s1.next(1)
s1.next(1)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.min.js"></script>

关于javascript - RxJS:在另一个订阅后明显中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48951420/

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