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