合并Observable并在所有主体发出价值时采取行动
问题描述:
我希望将observables合并为一个,然后在所有主体发出价值时订阅。到目前为止,我已经试过Observable.merge和Observable.zip合并Observable并在所有主体发出价值时采取行动
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受到的发射值,不所有。 等到A,B,C和D都发出价值的方法是什么?
答
您可以使用Observable.forkJoin
等待,直到所有源Observable发出至少一个值,并完成所有值。但是因为你使用的是主题,所以它们很可能没有完成,所以使用.zip()
是合理的。
zip()
运营商发出X
th只有当所有源发射X
值。在您的情况下,zip()
只会在所有A
,B
,C
和D
发出至少一个项目时才会发出单个项目。
但是,如果你使用merge
它会发出每次任何的A
,B
,C
和D
排放的项目。
你能提供给我如果可能的话plunkr?因为当我尝试在我的代码中的确切代码时,zip运算符不会发出任何东西...... – PowerLove
http://jsbin.com/hihutoj/8/edit?js,output – martin
当然,您首先需要订阅,然后调用'next()'s :) – martin