等到两个 Observable 完成

Wait until two Observables are complete

我想在两个 Observable 返回值后调用一个方法。我做了一些搜索,似乎 forkJoin 是我想要的,但我无法让它工作。我知道这两个 Observable 都在返回值,因为我在组件的其他地方单独使用每个 Observable 的数据,所以很明显我做错了其他事情。

这是我试过的。我正在使用 rxjs v6.4.

forkJoin(
  this.store.pipe(select(fromStore.getAppointmentsLoading)),
  this.clientStore.pipe(select(fromClientStore.getClientsLoading)),
).subscribe(
  ([res1, res2]) => {
    console.log('res1', res1);
    console.log('res2', res2);
  },
  err => console.error(err),
);

没有任何内容记录到控制台,我也没有收到任何错误。同样,我传递的 Observables 肯定有返回值。

我是做错了什么,还是完全使用了错误的方法forkJoin

forkJoin 在所有 observable 完成时(或其中之一抛出错误时)发出,而不是在它们发出时发出。

您可以改用 combineLatest

注意不要'rxjs/operators' 导入实例运算符。这是一些 IDE 的自动导入功能导致的常见错误。在这种情况下,我们需要从 'rxjs':

导入的静态版本
import {combineLatest} from 'rxjs';

combineLatest([
  this.store.pipe(select(fromStore.getAppointmentsLoading)),
  this.clientStore.pipe(select(fromClientStore.getClientsLoading)),
]).subscribe(
  ([res1, res2]) => {
    console.log('res1', res1);
    console.log('res2', res2);
  },
  err => console.error(err),
);