我是Angular的新手,所以我需要一些帮助,我的问题是打电话给http get我使用的服务是我的第一个get
我的第一项服务
getFirstData() { return this.http.get<FirstDataResults ('http://myurl.com/api/Classes/ads', httpOptions);
我的组件TS文件
this.data.getFirstData().subscribe(
data => {
this.firsobjects = data.results;
},
err => console.error(err),
() => this.getComplementData(this.firstobjects)
);
直到现在总是可以提取我的数据,当完成后,我运行第二个名为getComplementData的函数
我的第二次服务
getSecondData(idFirstObject: String) {
return this.http.get<ComplementDataResults>(
'http://myurl.com/api/Classes/Complement?' +
'where={'"idFirstObject":"' + idFirstObject + '"}',
httpOptions); }
我的组件TS文件
getComplementData(firsobjects) {
this.number = 0;
for (var _i = 0; _i < firsobjects.length; _i++) {
this.data.getSecondData(firsobjects[_i].id).subscribe(
(data) => {
var a = (data.results);
this.firsobjects[this.number].complements = a;
}, err => console.log('error ' + err),
() => console.log('Ok ')
);
}
}
我对第二个功能有问题,我可以提取所有数据,但是问题是补码数据没有排序 从我对循环内的http调用的了解来看,它们是并行的,因此是异步的。
我的问题是,如何在循环同步内运行http get以获得有序结果。
谢谢!
答案 0 :(得分:4)
您应该使用rxjs'forkJoin
getComplementData(firsobjects) {
this.number = 0;
let calls = [];
for (var _i = 0; _i < firsobjects.length; _i++) {
calls.push(this.data.getSecondData(firsobjects[_i].id));
}
forkJoin(...calls).subscribe(
data => { // Note: data is an array now
var a = (data[0].results);
this.firsobjects[this.number].complements = a;
}, err => console.log('error ' + err),
() => console.log('Ok ')
);
}
类似的东西。享受。