Angular 2 Http, Observables и рекурсивные запросы
У меня есть конечная точка REST, которая возвращает список элементов, максимум 1000 элементов за раз. Если имеется более 1000 элементов, ответ имеет статус HTTP 206, и естьNext-Range
заголовок, который я могу использовать в своем следующем запросе для получения большего количества предметов.
Я работаю наприложение Angular 2 и пытается реализовать это сHttp
а такжеObservable
, Моя проблема в том, что я не знаюкак объединить несколькоObservable
s в зависимости от того, сколько страниц элементов инаконец вернуть одинObservable
что мой компонент может подписаться.
Вот где я получил мою текущую реализацию TypeScript:
// NOTE: Non-working example!
getAllItems(): Observable<any[]> {
// array of all items, possibly received with multiple requests
const allItems: any[] = [];
// inner function for getting a range of items
const getRange = (range?: string) => {
const headers: Headers = new Headers();
if (range) {
headers.set('Range', range);
}
return this.http.get('http://api/endpoint', { headers })
.map((res: Response) => {
// add all to received items
// (maybe not needed if the responses can be merged some other way?)
allItems.push.apply(allItems, res.json());
// partial content
if (res.status === 206) {
const nextRange = res.headers.get('Next-Range');
// get next range of items
return getRange(nextRange);
}
return allItems;
});
};
// get first range
return getRange();
}
Тем не менее, это не работает. Если я правильно понял,Observable
возвращается как значение исходногоObservable
а не массив предметов.