我正在编写一个应用程序,它将监视不同服务器上所有应用程序的当前内部版本号。这是通过在每个应用程序中对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.builds
setupBuilds
中的数据设置,但我不知道如何使用rxjs observables
答案 0 :(得分:16)
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);
});
}
);
通过这种方式,您可以确保在调用subscribe方法中注册的回调时执行了所有请求...