是否有一个RxJS工厂函数(或更一般的说是一种模式)将其他几个合并在一起,但是当它们全部完成后,只发射一次?
我想要的用例是等待多个并行操作,然后在完成后再做其他事情。对于诺言,可以这样完成:
Promise.all(A, B, C).then(() => console.log('done'));
对于可观察物,我想出的最好的方法是
merge(A, B, C).pipe(takeLatest(1)).subscribe(() => console.log('done'));
但这并不说明A
,B
和C
为空。而且它不能为订户提供确定的价值。没有针对该用例的简单内置解决方案吗?
答案 0 :(得分:2)
您可以使用forkJoin。一旦给定的所有可观察值都完成,该操作符便发出。
const { Observable, of, forkJoin } = rxjs;
const obs1$ = new Observable(subscriber => {
subscriber.next('obs1$ - value 1');
subscriber.next('obs1$ - value 2');
subscriber.complete();
})
const obs2$ = of('obs2$');
const obs3$ = of('obs3$');
const result$ = forkJoin(
obs1$,
obs2$,
obs3$
);
result$.subscribe(v => console.log(v));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>