Angular RxJs只获取然后发出的值的计数



我有什么:服务,在服务主题和从该主题创建的可观察对象中。我用"subject"发射了3次。Next '来自3个独立的组件,并在另一个组件中下标。

我想实现什么?在我的按属性的订阅过滤器中,只获取两个最初发出的值,获取属性中具有最大值的值,自动取消订阅。

我试过了:

const validValues = ['a','b']
this.myService.pipe(
filter(x => validValues.some(y => y === x.name)),
max((a,b) => a.value - b.value),
take(2)
)

Take(2)不工作,仍然得到3个值。有什么建议吗?

max操作符在源可观察对象完成时工作。由于subject封装的可观察对象在默认情况下不会完成,所以您提到的代码片段永远不会发出,除非您调用subject.complete()。我是这样假设的。myService是主题。

this.myService.pipe(
filter(x => validValues.some(y => y === x.name)),
max((a,b) => a.value - b.value),
take(2)
).subscribe(console.log)
this.myService.complete()

话虽如此,您可以通过将take操作符至少放在max操作符之前来实现您想要实现的目标。Take将在2次排放完成最大操作符的源可观测后取消订阅。
现在,如果你想在过滤后/过滤前取2个排放量,你可以在filter()之后/之前放置take()。

最新更新