Angular2: qual é a melhor maneira de fazer várias chamadas de sincronização com o Observables?

Estou estudando os Observáveis em Angular2 / 4, antes de usar as Promessas para minha ligação de serviços.

Gostaria de saber qual é a melhor maneira de fazer várias chamadas de sincronização. Deixe-me explicar com um exemplo: meu componente de aplicativo possui um método getUserInfo () que precisa fazer 3 chamadas para 3 serviços diferentes que dependem um do outro.

getUserId():Number // return the logged in user userId from the session
getUserPermissions(userId):Array<String> // return a list of permission from the userId
getUserInfo(userId):String // return some additional info for the user

Agora vamos supor que eu tenha um objeto Usuário como o seguinte:

export class User {
id: number;
name: string;
info: string;
permissions: array<string>;
}

Preciso criar uma nova instância da classe User com os resultados da chamada de 3 serviços, portanto, preciso executar:

getUserId ();getUserPermissions ();getUserInfo ();

Qual é a melhor e mais educada maneira de conseguir isso através do Observable?

Com promessas, eu teria algo parecido com isto:

this._service.getUserId().then(r1 => {
  let userId: number = r1;
  this._service.getUserPermissions(userId).then(r2 => {
    let userPermissions: Array<String> = r2;
    this._service.getUserInfo(userId).then(r3 => {
      let userInfo: string = r3;
      let user: User = new User(userId, userInfo, userPermissions);
    });
  })
});

questionAnswers(1)

yourAnswerToTheQuestion