Cómo encadenar llamadas de Http en Angular2?

Soy nuevo en Angular2 y Http Observable. Tengo un componente que llama a servicio Http y devuelve Observable. Entonces me suscribo a ese Observable y funciona bien.

Ahora, quiero, en ese componente, después de llamar al primer servicio de Http, si la llamada es exitosa, llame a otro servicio de Http y devuélvalo. Por lo tanto, si la primera llamada no es exitosa, el componente devuelve ese Observable, al revés devuelve el Observable de la segunda llamada.

Entonces, la pregunta es, ¿cuál es la mejor manera de encadenar llamadas Http? ¿Hay alguna manera elegante, por ejemplo, como mónadas?

Puedes hacer esto usando el operador mergeMap

Primero importe el operador de la siguiente manera:

import 'rxjs/add/operator/mergeMap';

Entonces aquí está cómo encadenas dos llamadas:

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

Algunos más detalles aquí: http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

Puede encontrar más información sobre el operador mergeMap aquí