返回

combineLatest和forkJoin的区别

2023-10-16 combineLatest forkJoin combineLatest和forkJoin 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。它们分别适用于不同的情况。

顶部