RxJS:在完成时与单个发射合并

时间:2020-07-02 13:04:21

标签: rxjs

是否有一个RxJS工厂函数(或更一般的说是一种模式)将其他几个合并在一起,但是当它们全部完成后,只发射一次

我想要的用例是等待多个并行操作,然后在完成后再做其他事情。对于诺言,可以这样完成:

Promise.all(A, B, C).then(() => console.log('done'));

对于可观察物,我想出的最好的方法是

merge(A, B, C).pipe(takeLatest(1)).subscribe(() => console.log('done'));

但这并不说明ABC为空。而且它不能为订户提供确定的价值。没有针对该用例的简单内置解决方案吗?

1 个答案:

答案 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>