¿Cómo obligar a los observables a ejecutarse en secuencia?

Me estoy mudando del mundo Promesa al mundo Observable. Una cosa que suelo hacer con Promise es encadenar una serie de tareas y hacer que se ejecuten en secuencia. Por ejemplo, tengo tres tareas:printLog1() para imprimir 1 en la consola,printLog23() para imprimir 2 y 3 en la consola, yprintLog4() para imprimir 4.

Cuando quiero imprimir 1-2-3-4, escribiría una cadena de promesa como

printLog1()
  .then(() => {
    printLog23();
  })
  .then(() => {
    printLog4();
  });

Ahora quiero la misma funcionalidad con Observable y puedo reescribir elprintLog() funcionar en un observable como

printLog1 = Rx.Observabale.of(1).map((i) => console.log(i));
printLog23 = Rx.Observabale.of(2, 3).map((i) => console.log(i));
printLog4 = Rx.Observabale.of(4).map((i) => console.log(i));

Luego tengo tres observables que emiten diferentes valores a la consola. ¿Cómo los encadeno para que estos tres observables se ejecuten en orden e impriman1-2-3-4?

Respuestas a la pregunta(1)

Su respuesta a la pregunta