选择到现在为止发出的ReplaySubject值



是否有可靠的解决方案来获得当前在ReplaySubject中缓冲的值的快照?

我想到了这样的东西,但不确定这个解决方案有多可靠:

replaySubject.pipe(
takeUntil(timer(10).pipe(take(1)))
)

上面的计时器因素对我来说似乎是错误的,因为我不能保证所有的值都在给定的时间内正确发出(这适用于有很多值的重播主题)。

我认为这是一种方法:

replay
.pipe(
buffer(timer(0)),
take(1)
)
.subscribe(a => {
console.log(`This is one time value ${a}`);
});

StackBlitz演示。

ReplaySubject,当新订阅者注册时,它将同步发出其值:

for (let i = 0; i < copy.length && !subscriber.closed; i += infiniteTimeWindow ? 1 : 2) {
subscriber.next(copy[i] as T);
}
由于这个原因,我们使用buffer(timer(0)):当buffer的通知器(timer(0))发出时,这些值将已经添加到buffer的数组中。因此,它将能够发出所有ReplaySubject的累积值。

相关内容

  • 没有找到相关文章

最新更新