RxJS Promise Composition (pasar datos)

Soy nuevo en Rx y me resulta difícil encontrar documentación sobre cómo redactar promesas, de modo que los datos de la primera promesa se transfieran a la segunda y así sucesivamente. Aquí hay tres promesas muy básicas, los cálculos de los datos no son importantes, solo que algo asíncrono debe hacerse utilizando los datos de la promesa anterior.

 const p1 = () => Promise.resolve(1);
 const p2 = x => { const val = x + 1; return Promise.resolve(val); };
 const p3 = x => {
      const isEven = x => x % 2 === 0;
      return Promise.resolve(isEven(x));
 };

La forma tradicional de lograr la composición de la que estoy hablando:

 pl().then(p2).then(p3).then(console.log);

Mi implementación favorita es la composición y pipeP de Ramda:

R.pipeP(p1, p2, p3, console.log)()

Parece probable que Rx pueda manejar este tipo de situación con bastante fluidez. Sin embargo, lo más cerca que he encontrado hasta ahora es de la comparación RxJS a asíncrona (biblioteca) aquíhttps://github.com/Reactive-Extensions/RxJS/blob/master/doc/mapping/async/comparing.md:

 var Rx = require('rx'),
     fs = require('fs'),
     path = require('path');
 var file = path.join(__dirname, 'file.txt'),
     dest = path.join(__dirname, 'file1.txt'),
     exists = Rx.Observable.fromCallback(fs.exists),
     rename = Rx.Observable.fromNodeCallback(fs.rename),
     stat = Rx.Observable.fromNodeCallback(fs.stat);
 exists(file)
    .concatMap(function (flag) {
     return flag ?
         rename(file, dest) :
         Rx.Observable.throw(new Error('File does not exist.'));
    })
    .concatMap(function () {
        return stat(dest);
    })
   .forEach(
      function (fsStat) {
          console.log(JSON.stringify(fsStat));
      },
      function (err) {
          console.log(err);
      }
    );

concatMap parece prometedor, pero el código anterior se ve bastante horrible. También tuve problemas con mi ejemplo porque Rx.Observable.fromPromise (p1) no funcionará ya que espera una promesa en sí misma, no una función, y Rx.Observable.defer (p1) no parece pasar parámetros como el ejemplo.

¡Gracias!

Pregunta similar pero sin pasar datos:Encadenando promesas con RxJS

Respuestas a la pregunta(1)

Su respuesta a la pregunta