2016-05-11 33 views
18

c'è qualcosa come q.all per risolvere tutte le richieste di http api in angular2?q.all per osservabili angular2

In angular1, posso fare qualcosa di simile:

var promises = [api.getA(),api.getB()]; 
$q.all(promises).then(function(response){ 
    // response[0] --> A 
    // response[1] --> B 
}) 

Nel angular2, il modulo HTTP ritorna osservabile,

api.getA().subscribe(A => {A}) 
api.getB().subscribe(B => {B}) 

Ma io voglio risolvere A e B insieme, poi fare qualcosa .

risposta

27

Avrete bisogno l'operatore .forkJoin per quella

Observable.forkJoin([observable1,observable2]) 
     .subscribe((response) => { 
      console.log(response[0], response[1]); 
     }); 

È possibile importare il Observable con;

import {Observable} from 'rxjs/Rx'; 
+1

Conosci anche la soluzione RXJS per l'altra variante della chiamata $ q.all(), in cui è possibile passare un oggetto anziché un array? È un approccio più elegante perché in seguito puoi indirizzare le promesse per nome e non per indice. –

+1

@ ŁukaszBachman Mi piacerebbe vederlo come risposta :-) – echonax