Cómo manejar llamadas de observables dependientes en una llamada asincróna en Angular 2/4

Recientemente he estado trabajando con Angular de 2/4. Un día me encontré con algo como esto:

public getCustomersOnArea(zip:string):Observable<Customer>{...}

El problema fue que tuvimos que hacer 2 llamadas para obtener los datos. Pero una llamada depende de los datos de la otra. ¿Cómo resolver esto? Una manera es encapsular las 2 llamadas en una tercera y regresar esta para que se subscriban a ella.

public getCustomersOn(zip:string):Observable<Customer>{

return new Observable<Customer>(suscriptor => {
            this.http.post(zip)
                .subscribe (res => {}
                    this.http.post(res)
                        .subscribe (r => {}
                            Subscriber.Next(r);                           
                        },
                          e => subscriber.error(e),
                          () => subscriber.complete());
                });
}

Y eso es todo. ¿Conoces otra manera? Dejalo en la sección de comentarios