Angular 2 Http, Observables y solicitudes recursivas
Tengo un punto final REST que devuelve una lista de elementos, un máximo de 1000 elementos a la vez. Si hay más de 1000 elementos, la respuesta tiene el estado HTTP 206 y hay unNext-Range
encabezado que puedo usar en mi próxima solicitud para obtener más artículos.
Estoy trabajando en esouna aplicación Angular 2 y tratando de implementar esto conHttp
yObservable
. Mi problema es que no secómo fusionar múltiplesObservable
s dependiendo de cuántas páginas de artículos hay yfinalmente devolver unoObservable
que mi componente puede suscribirse.
Aquí es donde obtuve mi implementación actual de 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();
}
Sin embargo, esto no funciona. Si lo entendí correctamente, unObservable
se devuelve como el valor de la inicialObservable
y no la variedad de artículos.