Me gustaría consultar una Api que devuelva dada y el next elemento que contenga la siguiente URL para llamar.
Cuando next es nulo, significa que se envían todos los datos.
getData(url?: any) { if (!url) { url = `https....../geojson/geo/?srid=xxx&code=xx&jsonb_as_text=false&page_size=10`; } return this.httpClient.get(url, { headers }).pipe( flatMap((res: any) => { if (res.next) { this.getData(res.next); } return res; }) ); }En realidad, el componente solo recibe la primera llamada, pero no la segunda.
¿Cómo puedo encadenar bien las llamadas a la API y combinar los resultados?
Probablemente desee utilizar el operador de expand . Es recursivo: cada respuesta llama a la devolución de llamada del operador. Puede usar toArray para recopilar todas las respuestas como una matriz. Puede usar scan o ningún operador para procesar resultados inmediatos mientras los demás se están cargando.
getData(url) { return this.httpClient.get(url, { headers }) } getAllData() { const url = `https....../geojson/geo/?srid=xxx&code=xx&jsonb_as_text=false&page_size=10`; return this.getData(url).pipe( expand((res: any) => { if (res.next) { return this.getData(res.next); } return EMPTY; }), toArray(), map(responses => responses.flatMap(response => response.items)) ); }