Búsqueda de sitios web

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));