我想要一个可观察的冷组播。我的源Observable将值传递给ReplaySubject(1),多个观察者可以订阅该值,而在没有观察者的情况下,基础订阅也会丢弃。明确地说,我想要:
const m = source.pipe(shareReplay(1), refCount());
但是有一个重要的区别:我希望所有观察者都订阅一个Subject,而不是上面的m
。 (因为我也想打电话给subject.next()
)。
import { interval, ReplaySubject } from 'rxjs';
const source = interval(1000);
const subject = new ReplaySubject(1);
const m = source.pipe(
multicast(() => subject),
refCount()
);
subject.subscribe(...); // Not working, cold source not firing.
m.subscribe(...); // Works, but not what I want.
有什么想法可以实现这一目标吗?
编辑:
为澄清起见,我将重新措辞。
让我将m
定义为
const m = source.pipe(shareReplay(1), refCount());
m
很冷,因此当第一个m.subscribe()
被调用时,间隔interval(1000)
将开始运行,直到不再有观察者订阅m
。这是refCount
的行为。
我希望具有相同的行为,但有一个区别:我希望所有观察者都订阅一个Subject,而不是订阅Observable m
。即:
const source = interval(1000);
const mySubject = new ReplaySubject(1);
/* Do some magic with source and mySubject */
const subscription = mySubject.subscribe(...); // Will start the interval(1000)
// Wait a couple of seconds
subscription.unsubscribe(); // Will stop the interval