如何知道所有 Angular2 HTTP 调用何时完成

How to know when all Angular2 HTTP calls are finished

我正在编写一个应用程序来监视我们所有跨不同服务器的应用程序的当前内部版本号。这是通过向每个应用程序中的 txt 文件发出 http 请求来完成的。我正在使用 foreach 循环来做到这一点。

我遇到的问题是我不确定如何(使用 Observables)知道所有请求何时完成。

随着请求返回,我将响应添加为对象数组的 属性。然后,一旦我获得了所有数据,我就将其绑定到组件的模板,并在此处通过管道对其进行过滤。因此,我需要确保在所有数据完成下载之前不绑定它。

这是我获取数据的方式:

this.apps.forEach(app => {
  app.Environments.forEach(env => {
    this._buildMonitorService.getBuilds(env.URL)
      .subscribe((data) => {     
        setupBuilds(this.apps,data.url,data._body);
      });                
  });
});

setupBuilds 将响应添加到我的应用程序数组中。

我正在寻找的东西实际上是 Promise.all 我将绑定的地方 this.buildssetupBuilds 中的数据设置,但我不知道如何使用 rxjs observables

Observable.forkJoin 等同于 Promise.all 但对于可观察对象。

这是一个示例:

您可以通过以下方式重构代码:

var observables = [];
this.apps.forEach(app => {
  app.Environments.forEach(env => {
    observables.push(this._buildMonitorService.getBuilds(env.URL));
  });
});

Observable.forkJoin(observables).subscribe(
  (result) => {
    result.forEach((data) => {
      setupBuilds(this.apps,data.url,data._body);
    });
  }
);

这样你就可以确保在订阅方法中注册的回调被调用时所有的请求都被执行了...