我想要一些方法向我的服务器发送两个请求以获取对象列表(DocumentComponent),在这个DocumentComponent中我有一个对象DocumentContents列表
所以我需要在每次获得一个对象DocumentComponent之后我得到它的DocumentContents
this.gridService.getAllDocumentComponentByTemplate(1)
.subscribe(data => {
this.documentComponents = data;
console.log(this.documentComponents);
for (var component of this.documentComponents) {
this.getAllDocumentContents(component.id);
}
},
error => alert('Erreur ' + error),
() => {
console.log("finished ");
}
);
但这种方法不能并行工作 我得到最新DocumentComponent的最后一个DocumentContent列表
那么如何使用Observable.forkJoin或者有其他方法可以做到这一点谢谢
Observable.forkJoin(
this.gridService.getAllDocumentComponentByTemplate(1),
this.gridService.getAllDocumentContentByDocumentComponent(**id**)
).subscribe(data => {
this.documentComponents = data[0];
this.documentContents = data[1];
},
err => console.error(err)
);
我尝试了但是我得到了DocumentContents的最新列表,因为我将第二个方法getAllDocumentContentByDocumentComponent中的id作为一个静态值放入我需要使其变量
谢谢你的时间getAllDocumentContentByDocumentComponent(idDocumentComponent:number) {
return this._http.get('http://localhost:8080/template/getAllDocumentContentByDocumentComponent/' + idDocumentComponent)
.map(res => res.json());
}
getAllDocumentComponentByTemplate(idDocument:number) {
return this._http.get('http://localhost:8080/template/getAllDocumentComponentByTemplate/' + idDocument)
.map(res => res.json());
}
答案 0 :(得分:0)
我会尝试这样的事情:
this.gridService.getAllDocumentComponentByTemplate(1)
.flatMap(documentComponents => {
let contentObservables = documentComponents.map(documentComponent => {
return this.gridService.getAllDocumentContentByDocumentComponent(
documentComponent.id);
});
return Observable.forkJoin([
Observable.of(documentComponents),
...contentObservables
]);
})
首先获取文档组件,构建observable以获取每个组件的内容,然后使用forkJoin
并行执行所有内容。
请注意使用Observable.of
来获取初始请求的结果。