功能数量的观察值

时间:2018-08-17 12:22:18

标签: angular angular2-observables

f1() {
 //API CALL
 console.log('f1');    
}

f2() {
 console.log('f2');
 for(i=0 ;i<=n; i++){
 }
}

我有两个职能。我希望这两个可以互相帮助。在这里,我在函数2中有一个for循环。此for循环将使用函数1的API调用中的数据。因此,我想使用Observable逐一运行这两个函数。我想知道一种基本的方法,该方法如何创建一个可观察对象并对其进行订阅,以使这两个依赖函数可以一个接一个地运行。

  apiParam: any = ['posts', 'albums', 'comments', 'photos', 'users'];

 getObs() {
const apiRoot = 'https://jsonplaceholder.typicode.com/';
const urls = [];
for (let i = 0; i < this.apiParam.length; i++) {
  urls.push(apiRoot + this.apiParam[i]);
  // const url = apiRoot + this.apiParam[i];
}
of(...urls).pipe(
  concatMap((url: string) => this.getHTTP.getData(url)))
  .subscribe((result) => {
    this.resultArray.push(result);
    console.log('this.resultArray', this.resultArray);
  });
}

这是我使用过API调用的函数 现在我想使用for循环并使用this.resultArray这个数据。 像这样

for (let index = 0; index < this.resultArray.length; index++) {
 console.log(this.apiParam[index]);
  this.finalObject = { [this.apiParam[index]]: this.resultArray[index] 
};
  this.finalArray.push(this.finalObject);
 }
 console.log('========this.finalArray============================');
 console.log(this.finalArray);
 console.log('====================================');

但是每当我这样做时,for循环首先运行,然后再获取finalArray。 请帮我

1 个答案:

答案 0 :(得分:0)

您可以简单地将第一个调用链接到第二个调用(在组件内部):

constructor(private http: HttpClient) {}

first() {
  console.log('API called!');
}

second(data) {
  for (let item of data) {
    ...
  }
}

apiCall() {
  this.http.get(someURL).subscribe(
    (data) => {
      this.first();
      this.second(data);
    }
  );
}