Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道所有Angular2 HTTP调用何时完成_Angular_Rxjs - Fatal编程技术网

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

如何知道所有Angular2 HTTP调用何时完成,angular,rxjs,Angular,Rxjs,我正在编写一个应用程序,它将监控我们所有应用程序在不同服务器上的当前版本号。这是通过向每个应用程序中的txt文件发出http请求来实现的。我使用foreach循环来实现这一点 我遇到的问题是,我不确定如何(使用可观察对象)知道所有请求何时完成 当请求返回时,我将响应添加为对象数组的属性。一旦我有了所有的数据,我就把它绑定到组件的模板上,在那里它会被管道过滤。因此,我需要确保在所有数据都下载完毕之前不会绑定它 以下是我获取数据的方式: this.apps.forEach(app => {

我正在编写一个应用程序,它将监控我们所有应用程序在不同服务器上的当前版本号。这是通过向每个应用程序中的txt文件发出http请求来实现的。我使用foreach循环来实现这一点

我遇到的问题是,我不确定如何(使用可观察对象)知道所有请求何时完成

当请求返回时,我将响应添加为对象数组的属性。一旦我有了所有的数据,我就把它绑定到组件的模板上,在那里它会被管道过滤。因此,我需要确保在所有数据都下载完毕之前不会绑定它

以下是我获取数据的方式:

this.apps.forEach(app => {
  app.Environments.forEach(env => {
    this._buildMonitorService.getBuilds(env.URL)
      .subscribe((data) => {     
        setupBuilds(this.apps,data.url,data._body);
      });                
  });
});
setupBuilds
将响应添加到我的应用程序数组中

我要找的是一个有效的
承诺。所有的
都是我要绑定的地方

this.builds
setupBuilds
中的数据设置中,但我不知道如何使用rxjs Observable实现这一点。forkJoin
相当于
Promise.all
但用于Observable

以下是一个示例:

以下是重构代码的方法:

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

通过这种方式,您将确保在调用subscribe方法中注册的回调时执行所有请求…

因此,我尝试了设置(首先是我自己的方式,然后是您编辑的代码),我得到了
Observable\u 1.Observable.forkJoin不是一个函数
我确实认为您的答案将是我想要的,但是它不太起作用,您需要导入操作符:
import'rxjs/add/operator/forkJoin'或从rxjs导入所有内容
导入'rxjs/Rx'我已经从'rxjs/Observable'导入了{Observable}
是,但它只在
Observable
类上导入一组最小的方法。试试这个:
import{Observable}来自'rxjs/Rx'
以拥有所有(或逐个导入运算符)。。。