[英]Return Mono.empty() from mono{} coroutine scope
mono {
val abc: Int? = getSomeValue().awaitSingleOrNull
abc
}
如果 abc 是 null,上面的塊會返回什么?如果 abc 是 null,如何返回 Mono.empty()?
如果您仔細查看mono
function 簽名,您會看到:
block: suspend CoroutineScope.() -> T?
Mono<T>
(這是預期的,因為 Mono 不支持 null 值)文件指出:
如果塊的結果是 null,則調用 MonoSink.success 時沒有值。
這作為解釋可能不是很清楚,但這意味着在 null 值的情況下,將返回僅發送完成信號的 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。
Mono.empty()
等於
mono {
// .. codes
null // return
}
如果mono { null }
或flux { null }
將是空事件。 如果您在null
之前使用代碼,它們將運行,只是不發出任何內容。
val x: Mono<Void> = mono {
// your code will be executed
null
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.