angular - Angular2 gör flera förfrågningar med hjälp av rxjs subscribe
Jag har en angular2-app som lägger till eller tar bort objekt från en flervalsruta och skickar varje objekt till ett fjärr-API individuellt för att läggas till och behandlas i databasen. Följande metod skickar begäran till servern och får ett svar som en observerbar.
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());
}
Sedan har jag lagt till en klient för att konsumera detta, genom att använda subscribe-metoden för att konsumera det. Min förståelse är att det bara är nödvändigt att anropa subscribe en gång, men jag verkar inte få detta att fungera. Det enda som ger rätt resultat är att loopa igenom varje objekt och prenumerera flera gånger:
for (let i = 0; i < selected.length; i++) {
this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID)
.subscribe(status => {
console.log(status);
});
}
Finns det ett sätt att använda resultaten från API:et med rxjs utan att prenumerera flera gånger som ovan, eller är det det enda sättet att hämta datan?
Svar #1
Du kan använda combineLatest-operatorn.
Observable.combineLatest(
selected.map(selectedId =>
this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID)))
)
.subscribe((statusArray) => console.log('all done: ', statusArray));
