我有以下代码:
export class GetPersonsService {
url="https://swapi.co/api/people/";
personsObservables;
headers: HttpHeaders = new HttpHeaders()
.set('Accept', 'application/json');
constructor(private http:HttpClient) { }
getPerson(personIndex){
return this.http.get<Person>(`${this.url}${personIndex}`,{headers:this.headers});
}
getPersons(){
for(let i=0;i<10;i++){
this.personsObservables.push(this.getPerson(i));
}
console.log(this.personsObservables);
return forkJoin(this.personsObservables);
}
}
而且我不明白为什么this.personsObservables是未定义的,因为如果我调用getPerson(1),我就可以观察到了。接下来的问题是如果有10/100或更多的项目并且我想检测有多少个项目,如何维护api他们。
有必要:
undefined
错误await
调用API getPerson
(i)`forkJoin
。因此,代码应如下所示:
const personsObservables = [];
async getPersons(){
for(let i=0;i<10;i++){
this.personsObservables.push(await this.getPerson(i));
}
console.log(this.personsObservables);
return forkJoin(this.personsObservables);
}
让我举一个例子:
const request1 = this.http.get('https://restcountries.eu/rest/v1/name/india');
const request2 = this.http.get('https://restcountries.eu/rest/v1/name/us');
const request3 = this.http.get('https://restcountries.eu/rest/v1/name/ame');
const request4 = this.http.get('https://restcountries.eu/rest/v1/name/ja');
const requestArray = [];
requestArray.push(request1);
requestArray.push(request2);
requestArray.push(request3);
requestArray.push(request4);
forkJoin(requestArray).subscribe(results => {
console.log(results);
this.response = results;
});
所有结果都按顺序排序,然后将项目推入requestArray.
其中。在stackblitz示例中可以看到。