Select 到目前为止发出的 ReplaySubject 值

Select ReplaySubject values emitted untill now

是否有可靠的解决方案来获取 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 demo.

ReplaySubject,当有新订阅者注册时,会发出its values synchronously:

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 的累加值。