我有一个可观察的对象,我正在尝试以此作为重放对象。它应该发出可观察到的当前事件和所有以前的事件。
根据此answer,这是我认为可行的方法:
// create an observable from dummy array and a blank replay subject
const observable$ = from([1, 2, 3])
const replay$ = new ReplaySubject()
// create a replay subject from the observable (not working as expected)
observable$.subscribe(replay$)
// log out the events
observable$.subscribe(e => console.log('observable', e) )
replay$.subscribe(e => console.log('replay', e))
日志
observable 1
observable 2
observable 3
replay 1
replay 2
replay 3
我正在寻找的行为使得重放主题也发出先前的事件,就像这样:
replay [1]
replay [1, 2]
replay [1, 2, 3]
如何归档?
答案 0 :(得分:1)
ReplaySubject
仅在订阅时重播整个序列。这意味着仅当您呼叫replay$.subscribe()
时。之后,它只会通过所有排放。
您想要从输出中获得的结果看起来像是要与scan()
链接在一起,因为ReplaySubject
会逐个发射项目,而不是您期望的累积数组。
observable$.pipe(
scan((acc, val) => [...acc, val], []),
).subscribe(replay$);