Есть API (https://panelapp.genomicsengland.co.uk/api/v1/panels/?page=1), для которого я хочу использовать все данные для своих угловых приложений. Проблема в том, что их API имеет нумерацию страниц, и я хочу получить весь контент сразу.
Как вы можете видеть в API, на самом деле они имеют атрибут "next" в своем ответе, который указывает на следующую страницу. Я хочу иметь возможность продолжать запрашивать у API до тех пор, пока атрибут "next" не равен NULL, а затем объединить все их ответы в один.
Я пытался использовать рекурсив, но к тому времени, как он достигнет 2-го цикла, я получаю неопределенное значение. Я думаю, что это потому, что асинхронный запрос, следовательно, я получаю неопределенным.
Ниже мой код
@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);
})