循环内多次通话

时间:2018-06-27 13:20:43

标签: angular angular5 angular6 angular-httpclient angular4-httpclient

我是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以获得有序结果。

谢谢!

1 个答案:

答案 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 ')
  );
}

类似的东西。享受。