【发布时间】:2023-01-27 18:57:35
【问题描述】:
mono {
val abc: Int? = getSomeValue().awaitSingleOrNull
abc
}
如果 abc 为 null ,上面的块将返回什么?如果 abc 为 null ,如何返回 Mono.empty() ?
【问题讨论】:
标签: spring kotlin spring-webflux project-reactor
mono {
val abc: Int? = getSomeValue().awaitSingleOrNull
abc
}
如果 abc 为 null ,上面的块将返回什么?如果 abc 为 null ,如何返回 Mono.empty() ?
【问题讨论】:
标签: spring kotlin spring-webflux project-reactor
如果您仔细查看 mono 函数签名,您会发现:
block: suspend CoroutineScope.() -> T?
Mono<T>(这是预期的,因为 Mono 不支持空值)
文件指出:
如果块的结果为空,则调用 MonoSink.success 时没有值。
这作为解释可能不是很清楚,但这意味着在空值的情况下,将返回一个只发送完成信号的 Mono。这是空 Mono 的定义。
我们可以用简单的程序来测试它:
import kotlinx.coroutines.reactor.mono import reactor.core.publisher.Mono fun main() { var empty : Mono<String> = mono { null } empty.defaultIfEmpty("EMPTY !") .block() ?.let(::println) }它打印
EMPTY !,这很好地表明 null 值已被视为“无值”,并产生了一个空的 Mono。
【讨论】: