rxjs - RxJS:完成时与单个发射合并
问题描述
是否有一个 RxJS 工厂函数(或更一般地说是一种模式)将几个其他的合并在一起,但在所有这些都完成后才发出一次?
我想要这个的用例是等待几个并行操作,然后在它们完成后执行其他操作。对于 Promise,可以这样做:
Promise.all(A, B, C).then(() => console.log('done'));
对于 observables,我想出的最好的方法是
merge(A, B, C).pipe(takeLatest(1)).subscribe(() => console.log('done'));
但是,这并不能说明A
、B
和C
为空。而且它不会为订阅者提供确定性的价值。这个用例没有简单的内置解决方案吗?
解决方案
您可以使用forkJoin。一旦所有给定的 observables 完成,这个操作符就会发出。
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>
推荐阅读
- php - 损坏的 preg_match 函数?(PHP 7.4.2)
- azure-ad-b2c - Azure AD b2c android 应用程序可安全访问非图形 API
- flutter - 从类的实例访问数据
- python - 需要匹配所有格式为 `{word}{.,#}{word}` 且严格匹配的正则表达式
- python - bash - 将变量传递给 shell 文件中的字符串
- java - 如何在 for 循环中使用执行程序服务调用 CompletableFuture supplyAsync(()
- python - 在 pandas 上处理多个 csv 文件
- java - 在实例之间共享内存中的 java 对象
- html - 为什么我的下拉输入箭头不显示?
- dns - 在一个地区注册 IPV4 公网地址,在另一个地区使用