在 Mono<String> 中转换 Mono<Void> 添加一个值
Transform Mono<Void> in Mono<String> adding a value
我的程序服务提供了一些returnMono<Void>
的删除方法,例如:fun delete(clientId: String) : Mono<Void>
调用 .delete("x")
后,我想将 clientId 传播到下游以执行其他操作:
userService.get(id).map{ user ->
userService.delete(user.id) //This returns Mono<Void>
.map {
user.id //Never called!!!
}
.map { userId ->
//other calls using the propagated userId
}
}
问题是因为 delete returns a Mono<Void>
,下面的 .map {
user.id }
永远不会被调用。那么如何将 Mono<Void>
转换为 Mono<String>
来传播 userId?
我设法使用 hasNext 将其转换为布尔值来解决它:
@Test
fun `should`() {
val mono: Mono<String> = "1".toMono()
.flatMap { id ->
val map = Mono.empty<Void>()
.hasElement()
.map {
id + "a"
}.map {
(it + "1")
}
map
}
mono.doOnNext {
println(mono)
}.subscribe()
}
您可以使用 thenReturn
运算符:
userService.get(id)
.flatMap { user -> userService.delete(user.id).thenReturn(user.id) }
.flatMap { id -> //other calls using the propagated userId }
我的程序服务提供了一些returnMono<Void>
的删除方法,例如:fun delete(clientId: String) : Mono<Void>
调用 .delete("x")
后,我想将 clientId 传播到下游以执行其他操作:
userService.get(id).map{ user ->
userService.delete(user.id) //This returns Mono<Void>
.map {
user.id //Never called!!!
}
.map { userId ->
//other calls using the propagated userId
}
}
问题是因为 delete returns a Mono<Void>
,下面的 .map {
user.id }
永远不会被调用。那么如何将 Mono<Void>
转换为 Mono<String>
来传播 userId?
我设法使用 hasNext 将其转换为布尔值来解决它:
@Test
fun `should`() {
val mono: Mono<String> = "1".toMono()
.flatMap { id ->
val map = Mono.empty<Void>()
.hasElement()
.map {
id + "a"
}.map {
(it + "1")
}
map
}
mono.doOnNext {
println(mono)
}.subscribe()
}
您可以使用 thenReturn
运算符:
userService.get(id)
.flatMap { user -> userService.delete(user.id).thenReturn(user.id) }
.flatMap { id -> //other calls using the propagated userId }