如何将两个流量与一个嵌套流量连接?为什么此代码执行永不结束?
@Test
fun `concatenating two flux`() {
val names = listOf("israel", "israel")
val a = Flux.just("a", "v")
.flatMap { it.toUpperCase().toMono() }
.concatWith { names.joinToString(" ").toMono() }
StepVerifier.create(a).expectNext("A", "V", "israel israel").verifyComplete()
}
当我的通量带有单独的变量时,执行将按预期运行
@Test
fun `concatenating two flux`() {
val names = listOf("israel", "israel")
val b = names.joinToString(" ").toMono()
val a = Flux.just("a", "v")
.flatMap { it.toUpperCase().toMono() }
val c = a.concatWith(b)
StepVerifier.create(c.log()).expectNext("A", "V", "israel israel").verifyComplete()
}
答案 0 :(得分:2)
您需要在()
中使用{}
的{{1}}接口
concatWith()
大多数Rx2方法确实接受实际的lambda,有些方法采用// RIGHT!
Flux.just("a", "v")
.flatMap { it.toUpperCase().toMono() }
.concatWith ( names.joinToString(" ").toMono() )
// WRONG!
Flux.just("a", "v")
.flatMap { it.toUpperCase().toMono() }
.concatWith { names.joinToString(" ").toMono() }
而不是Callable<ObservableSource<T>>
,另一些采用ObservableSource
。
Function<T, ObservableSource<R>>
-可以正常工作。
或
Observable.defer { Observable.just(1) }
-也可以按预期工作(如果您故意忽略传入的参数)。
第三个事实是我们习惯了Rx1,它总是将observable.flatMap { Observable.just(1) }
用在其Observable
方法中,不能表示为lambda,这就是为什么我们需要使用{ {1}}代替andThen()