1

下面是我的应用程序中一个组件的代码片段,我在其中订阅了多个可观察对象并在分别获取值后加载数据 [一个 api 调用]。

  ngOnInit() {
    this.combinedObservable$ = combineLatest(
      this.service1.getStudentId(),
      this.service2.getTeacherId(),
      this.service3.getResultId(),
      this.service4.getReportId(),
      this.service5.getYearId(),
    ).subscribe(value => {
      this.studentId = value[0];
      this.teacherId = value[1];
      this.resultId = value[2];
      this.reportId = value[3];
      this.yearId = value[4];
      // Load Data for the page by making an api call
      this.loadData(value[0], value[1], value[2], value[3], value[4]);
    });
  }

  ngOnDestroy() {
    this.combinedObservable$.unsubscribe();
  }

在这种情况下,CombineLatest 对我有用,但是 loadData 被多次调用。我相信发生这种情况是因为可观察对象在更新后会发出值。服务中 [studentId、teacherId、resultId、reportId、yearId] 的初始值设置为 0,以适应 combineLatest。

在收到所有 5 个值 [不是 0 的初始值] 后,有什么方法可以调用 LoadData 方法 [api 调用]?像 onComplete 之类的东西?

4

1 回答 1

4

替换combineLatestforkJoinwhich 将等待所有可观察对象在发射之前完成。

于 2020-03-02T05:49:05.473 回答