Composição do RxJS Promise (passando dados)

Sou novato no Rx e estou com dificuldade em encontrar documentação sobre como compor promessas, de modo que os dados da primeira promessa sejam passados para a segunda e assim por diante. Aqui estão três promessas muito básicas: os cálculos dos dados não são importantes, apenas que algo assíncrono deve ser feito usando os dados da promessa 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));
 };

A maneira tradicional de obter a composição de que estou falando:

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

Minha implementação favorita é composeP e pipeP do Ramda:

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

Parece provável que Rx possa lidar com esse tipo de situação com bastante fluência. No entanto, o mais próximo que encontrei até agora é da comparação entre RxJS e assíncrona (biblioteca) aquihttps://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);
      }
    );

O concatMap parece promissor, mas o código acima parece horrível. Eu também estava tendo problemas com o meu exemplo, porque Rx.Observable.fromPromise (p1) não funciona, pois espera uma promessa em si, não uma função, e Rx.Observable.defer (p1) parece não passar parâmetros como o exemplo.

Obrigado!

Pergunta semelhante, mas sem transmissão de dados:Promessas de encadeamento com RxJS

questionAnswers(1)

yourAnswerToTheQuestion