Reactor:将 zipWhen 与另一个元组一起使用后如何获得扁平元组?

Rüd*_*ulz 1 reactive-programming kotlin project-reactor

当我链接多个zipWhen调用时,结果将是 aTuble2<Tuple2<Foo, Bar>, Bam>而不是 a Tuple3<Foo, Bar, Bam>。随后的每一次这种情况都会变得更糟zipWhen

例子:

val getFoo()
  .zipWhen { foo ->
    getBar(foo)
  }
  .zipWhen { fooBar -> 
    getBam(fooBar.t1, fooBar.t2)
  }
  .doOnNext { fooBarBam ->
    log.debug { "foo: ${fooBarBam.t1.t1}" }
    log.debug { "bar: ${fooBarBam.t1.t2}" }
    log.debug { "bam: ${fooBarBam.t2}" }
  }
Run Code Online (Sandbox Code Playgroud)

获取 doOnNext 的最优雅且可重用的方法是什么Tubple3

JEY*_*JEY 5

您可以做的是将zipWhen 与组合器一起使用,例如:

getFoo()
.zipWhen {foo -> getBar(foo) }
.zipWhen({ t -> getBam(t.t1, t.t2) }, {a, b -> Tuples.of(a.t1, a.t2, b)})
.doOnNext { fooBarBam ->
   log.debug { "foo: ${fooBarBam.t1}" }
   log.debug { "bar: ${fooBarBam.t2}" }
   log.debug { "bam: ${fooBarBam.t3}" }
}
Run Code Online (Sandbox Code Playgroud)