Kotlin 未能订阅多个项目

Kotlin 未能订阅多个项目,kotlin,project-reactor,Kotlin,Project Reactor,当我使用Mono.thenMany时,通量数据丢失,为什么 @Test fun thenManyLostFluxDataTest() { Mono.empty<Int>() .thenMany<Int> { Flux.fromIterable(listOf(1, 2)) } .subscribe { println(it) } // why not output item 1, 2 } 现在我使用另一种方法来完成thenMany方法应该做的事情: /

当我使用Mono.thenMany时,通量数据丢失,为什么

@Test
fun thenManyLostFluxDataTest() {
  Mono.empty<Int>()
    .thenMany<Int> { Flux.fromIterable(listOf(1, 2)) }
    .subscribe { println(it) } // why not output item 1, 2
}
现在我使用另一种方法来完成
thenMany
方法应该做的事情:

// this method output item 1, 2
@Test
fun flatMapIterableTest() {
  Mono.empty<Int>()
    .then(Mono.just(listOf(1, 2)))
    .flatMapIterable { it.asIterable() }
    .subscribe { println(it) } // output item 1, 2 correctly
}ed
//此方法输出项1、2
@试验
fun FlatMapiteTableTest(){
Mono.empty()
.then(Mono.just(listOf(1,2)))
.flatMapIterable{it.asIterable()}
.subscribe{println(it)}//正确输出项目1、2
}
您正在使用Kotlin的“lambda作为最后一个参数”简短语法。问题是,如果您查看
thenMany
方法签名,它不接受
函数
,而是接受
发布者

那么为什么lambda被接受,它代表了什么

实际上,它似乎被解释为一个
发布者
(因为它只有一个方法,
订阅(订户)


{}
替换为
()
,一切将恢复正常。

提交一个反应堆堆芯。回答非常好。原来是这样。
// this method output item 1, 2
@Test
fun flatMapIterableTest() {
  Mono.empty<Int>()
    .then(Mono.just(listOf(1, 2)))
    .flatMapIterable { it.asIterable() }
    .subscribe { println(it) } // output item 1, 2 correctly
}ed