是否有可靠的解决方案来获得当前在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
的累积值。