【发布时间】:2019-06-27 07:40:23
【问题描述】:
有一个 API(https://panelapp.genomicsengland.co.uk/api/v1/panels/?page=1),我想将所有数据用于我的 Angular 应用程序。问题是他们的 API 有分页,我想一次检索所有内容。
正如您在 API 上看到的那样,它们实际上在其响应中具有指向下一页的“next”属性。只要“下一个”属性不为空,我希望能够继续从 API 请求,然后将它们的所有响应合并为一个。
我尝试过使用递归,但是当它到达第二个循环时,我得到了未定义的值。我的猜测是这是因为异步请求,因此我得到了未定义。
下面是我的代码
@Injectable()
export class GenomicsEnglandService {
panels = [];
constructor(private http: HttpClient) {
}
getPanels(url): Observable<any>{
const headers = new HttpHeaders()
.append('Content-Type', 'application/json')
.append('Accept', '*/*');
return this.http.get(url, {headers: headers})
.map((data) => {
panels = panels.concat(data.results);
if(data.next){
this.getPanels(data.next);
}else{
return panels;
}
})
.catch((e) => {
Raven.captureMessage("GENOMICS ENGLAND ERROR: " + JSON.stringify(e));
return of([]);
});
}
}
然后从我刚刚调用的组件中调用
this.GenomicsEnglandService.getPanels('https://panelapp.genomicsengland.co.uk/api/v1/panels/?page=1').subscribe(data => {
console.log(data);
})
【问题讨论】:
标签: angular recursion rxjs angular-httpclient