循环内多次调用

Multiple Calls inside loop

我是 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 进入循环同步以获得有序结果。

谢谢!

你应该使用 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 ')
    );
}

类似的东西。享受吧。