Kotlin 未能订阅多个项目
当我使用Mono.thenMany时,通量数据丢失,为什么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方法应该做的事情: /
@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