我想在两个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),
);


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

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

最佳答案

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),
);

10-04 10:24