我希望将observable合并为一个,然后在所有主题都发出值时进行订阅。到目前为止,我已经尝试过Observable.merge和Observable.zip
public A:Subject<any> = new Subject();
public B:Subject<any> = new Subject();
public C:Subject<any> = new Subject();
public D:Subject<any> = new Subject();
public Complete:Subject<any> = new Subject();
A.next(true);
B.next(true);
C.next(true);
D.next(true);
Observable.zip(A,B,C,D).subscribe(res=>{Complete.next(true)})
但如果我在上面做,我认为订阅者将听A,B,C或D中的任何一个发出一个值,而不是ALL。 等待A,B,C和D都发出一个值的方法是什么?
答案 0 :(得分:0)
您可以使用等待所有源Observable发出至少一个值并且所有值都完成的Observable.forkJoin
。但是,由于你正在使用主题,很可能它们没有完成,所以使用.zip()
是有道理的。
zip()
运算符仅在所有源发出X
值时才会发出X
个值。在您的情况下,zip()
仅在所有A
,B
,C
和D
排放至少一个项目时才会发出单个项目。
但是,如果您使用merge
,则每当A
,B
,C
和D
中的任何一个发出项目时,它都会发出。