如何创建永远不完整的rxjs主题

时间:2018-04-22 11:11:15

标签: rxjs rxjs5

朋友。我通过来自其他可观察对象的动态订阅获得了主题Worker。但是当所有可观察的完成然后Runnbale完成而没有第一个完成时。

我该怎么做?

c

实际输出

c

期望

const c = new Subject;

const a = Observable.interval(100).take(3).mapTo('a');
const b = Observable.interval(150).take(3).mapTo('b');


a.subscribe(c);
b.subscribe(c);
c.subscribe(console.log);

1 个答案:

答案 0 :(得分:1)

这是正确的行为,因为主体具有内部状态,并且当它收到complete通知时,它将自己标记为“已停止”并且永远不会发出任何内容。这就是你的例子中正在发生的事情。当您使用a.subscribe(c)时,您正在为所有三种类型的通知订阅c,当源发出complete时,它也会被c收到,并且它会停止发送。

相反,您只能c订阅next次通知:

a.subscribe(v => c.next(v));
b.subscribe(v => c.next(v));

然后,如果您希望在所有源完成后正确完成源,您可以执行以下操作(还需要在所有源Observable上使用share()):

const a = Observable.interval(100)...share();
const b = Observable.interval(150)...share();

...

Observable.forkJoin(a, b)
  .subscribe(() => c.complete());