combineLatest和forkJoin的区别
2023-10-16 1099 0
combineLatest 和 forkJoin 是 RxJS 中两个常用的组合操作符,它们有以下主要区别:
combineLatest:
发出时机:
combineLatest 会在任何一个源 Observable 发出新值时,都会发出一个新的组合值。
发出的值:
它会将所有源 Observables 的最新值组合成一个新的数组,并且每当任何一个源 Observable 发出新值时,就会发出一个新的组合值。
Observable 数量:
combineLatest 可以接受多个 Observables 作为参数,它会跟踪所有这些 Observables,并在其中任何一个发出新值时发出一个新的组合值。
示例:
import { combineLatest, of } from 'rxjs';
const obs1$ = of(1, 2, 3);
const obs2$ = of('A', 'B', 'C');
const combined$ = combineLatest(obs1$, obs2$);
combined$.subscribe(([val1, val2]) => {
console.log(`obs1$: ${val1}, obs2$: ${val2}`);
});
forkJoin:
发出时机:
forkJoin 会等待所有的 Observables 完成,然后将每个 Observable 的最终值作为数组发出。
发出的值:
它会发出一个包含每个 Observable 的最终值的数组。
Observable 数量:
forkJoin 接受一个 Observable 数组作为参数,并在所有 Observables 完成后发出一个包含所有最终值的数组。
示例:
import { forkJoin, of } from 'rxjs';
const obs1$ = of(1, 2, 3);
const obs2$ = of('A', 'B', 'C');
const joined$ = forkJoin([obs1$, obs2$]);
joined$.subscribe(([val1, val2]) => {
console.log(`obs1$: ${val1}, obs2$: ${val2}`);
});
使用场景:
combineLatest 通常用于需要在多个 Observables 中的任何一个发出新值时采取操作的情况,比如实时数据展示等。
forkJoin 通常用于需要等待所有 Observables 完成后才能采取操作的情况,比如同时获取多个 HTTP 请求的数据。
根据具体的业务需求和情境,你可以选择使用 combineLatest 或 forkJoin 来处理 Observables。它们分别适用于不同的情况。