Encadenamiento de observables en RxJS

Estoy aprendiendo RxJS y Angular 2. Digamos que tengo una cadena de promesa con múltiples llamadas a funciones asíncronas que dependen del resultado anterior, que se ve así:

var promiseChain = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(1);
  }, 1000);
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(result + 2);
    }, 1000);
  });
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
      setTimeout(() => {
      resolve(result + 3);
        }, 1000);
  });
});

promiseChain.then((finalResult) => {
  console.log(finalResult);
});

Mis intentos de hacer lo mismo usando RxJS sin el uso de promesas produjeron lo siguiente:

var observableChain = Observable.create((observer) => {
  setTimeout(() => {
    observer.next(1);
    observer.complete();
  }, 1000);
}).flatMap((result) => {
  console.log(result);

  return Observable.create((observer) => {
    setTimeout(() => {
      observer.next(result + 2);
      observer.complete()
    }, 1000);
  });
}).flatMap((result) => {
  console.log(result);

  return Observable.create((observer) => {
    setTimeout(() => {
      observer.next(result + 3);
      observer.complete()
    }, 1000);
  });
});

observableChain.subscribe((finalResult) => {
  console.log(finalResult);
});

Produce el mismo resultado que la cadena de promesa. Mis preguntas son

¿Lo estoy haciendo bien? ¿Hay alguna mejora relacionada con RxJS que pueda hacer al código anterior?

¿Cómo consigo que esta cadena observable se ejecute repetidamente? es decir, agregar otra suscripción al final solo produce un 6 adicional, aunque espero que imprima 1, 3 y 6.

observableChain.subscribe ((finalResult) => {console.log (finalResult);});

observableChain.subscribe ((finalResult) => {console.log (finalResult);});

1 3 6 6

Respuestas a la pregunta(1)

Su respuesta a la pregunta