朋友。我通过来自其他可观察对象的动态订阅获得了主题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);
答案 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());