我想将 observables 合并为一个,然后在所有主题都发出值时订阅。到目前为止,我已经尝试过 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 中的任何一个主题发出一个值,而不是全部。 等到A、B、C、D都发出一个值,有什么办法呢?
最佳答案
您可以使用 Observable.forkJoin
等待所有源 Observable 发出至少一个值并且所有值都完成。但是由于您使用的是主题,所以它们很可能没有完成,因此使用 .zip()
是有意义的。
zip()
运算符仅在所有源发出 X
值时发出第 X
值。在您的情况下,zip()
仅在所有 A
、B
、C
和 时才会发出单个项目>D
发出至少一个项目。
但是,如果您使用 merge
,它会在每次 A
、B
、C
时发出和 D
发出一个项目。
关于javascript - 合并 Observable 并在所有主题都发出值时采取行动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45942481/