等待两个可观察值完成

时间:2019-04-14 16:45:30

标签: angular rxjs ngrx fork-join

我想在两个Observables返回值之后调用一个方法。我做了一些搜索,看来forkJoin是我想要的,但我无法使它正常工作。我知道这两个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),
);

什么都没有记录到控制台,并且我没有收到任何错误。同样,我传递的Observable肯定是返回值。

我是在做错什么,还是完全通过使用forkJoin来采取错误的方法?

1 个答案:

答案 0 :(得分:3)

forkJoin在所有可观察对象完成时发出,而不是在它们发出时发出。

您可以改用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),
);