Estoy haciendo una aplicación simple con Angular 4 y una API que tiene varias páginas para sus solicitudes.
Por ejemplo, obtengo los 10 primeros caracteres con esta url:
http://swapi.co/api/people/
Y para obtener las siguientes 10 personas, tengo que hacer una solicitud a esta url: http://swapi.co/api/people/?page=2
¿Cómo puedo obtener todas las personas en una sola solicitud? ¿O cuál es la solución para hacer todas las solicitudes con buenas prácticas?
Respuestas
12 para la respuesta № 1Tienes que usar forkJoin
método para cargar datos de más de una fuente.
En primer lugar, inclúyalos en el typescript
archivo.
import {Observable} from "rxjs/Rx";
Muchas veces, necesitamos cargar datos de más de una fuente, y debemos esperar hasta que se hayan cargado todos los datos.
forkJoin
método envuelve múltiples Observables
. En otras palabras, usamos forkJoin
correr concurrent
http peticiones.
subscribe()
método de forkJoin
establece los controladores en todo el conjunto de Observables.
Puedes leer más sobre tenedor aquí, incluyendo muchos ejemplos.
Supongamos que tiene que obtener las primeras 10 páginas.
var pages:number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
O simplemente: var pages:number[]=new Array(10).fill().map((v,i)=>i+1);
// map them into a array of observables and forkJoin
return Observable.forkJoin(
pages.map(
i => this.http.get("http://swapi.co/api/people/?page=" + i)
.map(res => res.json())
)
).subscribe(people => this.people = people);