angular - Angular2 realizando múltiples solicitudes usando rxjs subscribe
Tengo una aplicación angular2 que agrega o elimina elementos de un cuadro de selección múltiple y envía cada elemento a una API remota individualmente para que se agregue y se procese en la base de datos. El siguiente método envía la solicitud al servidor y obtiene una respuesta como un observable
removeFromClientLibrary(username: string, roleID: string): Observable<any> {
let body = JSON.stringify({Key: username, Value: roleID});
return this._http.post(this._removeFromLibraryURL, body, this.emsConfig.getStandardHttpHeaders())
.map((res:Response) => <any>res.json());
}
Luego he añadido un cliente para consumir esto, utilizando el método subscribe para consumirlo. Mi comprensión es que solo es necesario llamar a subscribe una vez, sin embargo, no parece que esto funcione. Lo único que devuelve el resultado correcto es recorrer cada elemento y suscribirse múltiples veces:
for (let i = 0; i < selected.length; i++) {
this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID)
.subscribe(status => {
console.log(status);
});
}
¿Hay una manera de consumir los resultados de la API usando rxjs sin suscribirse múltiples veces como arriba, o esa es la única forma de recuperar los datos?
Respuesta #1
Puedes usar el operador combineLatest.
Observable.combineLatest(
selected.map(selectedId =>
this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID)))
)
.subscribe((statusArray) => console.log('all done: ', statusArray));
