当Subject具有0个观察者时,删除可观察的订阅

时间:2018-06-19 15:30:24

标签: rxjs

我想要一个可观察的冷组播。我的源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

0 个答案:

没有答案