2015-12-05 27 views
41

Sono nuovo su Angular2 e Http Observable. Ho un componente che chiama il servizio Http e restituisce Observable. Di quanto sottoscrivo quell'Osservabile e funziona bene.Come concatenare le chiamate Http in Angular2

Ora, desidero, in quel componente, dopo aver chiamato il primo servizio Http, se la chiamata è riuscita, chiamare un altro servizio Http e restituire tale Osservabile. Quindi, se la prima chiamata non è riuscita, la componente restituisce Osservabile, di fronte restituisce Osservabile della seconda chiamata.

Quindi, la domanda è, qual è il modo migliore per concatenare le chiamate Http? C'è un modo elegante, per esempio come le monadi?

risposta

67

È possibile eseguire questa operazione utilizzando l'operatore mergeMap

prima importazione l'operatore come segue:

import 'rxjs/add/operator/mergeMap';

Poi ecco come si concatenano due chiamate:

this.http.get('./customer.json') 
      .map((res: Response) => res.json()) 
      .mergeMap(customer => this.http.get(customer.contractUrl)) 
      .map((res: Response) => res.json()) 
      .subscribe(res => this.contract = res); 

ancora un po ' dettagli qui: http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

Maggiori informazioni sull'operatore mergeMap può essere trovato here

+5

Con angolare 2.0 (beta 0) i seguenti sono necessari: importazione 'rxjs/aggiungere/operatore/carta'; importazione 'rxjs/add/operator/mergeMap'; –

+0

Mentre questo funziona perfettamente. ogni volta che rieseguo il percorso le chiamate http vengono attivate 2 volte in più. ngOnInit() { let counter1 = 0, counter2 = 0; console.log ('MyBiraComponent ngOnInit'); let uk = this.us.get(); this.u = uk.map (person => { console.log ('riga 45:', ++ counter1); return person.id; }). FlatMap (id => { console.log ('line 48:', ++ counter2); return this.bu.get (id); }). subscribe (res => { console.log (res); }); } ngOnDestroy() { this.u.unsubscribe(); } – Prabhat

+0

postato come domanda qui http://stackoverflow.com/questions/41087885/chained-rx-calls-called-multiple-times – Prabhat

Problemi correlati