【发布时间】:2020-03-03 14:32:16
【问题描述】:
我正在使用 Kotlin + Reactor(Mono 和 Flux),我想知道使用 await...()(来自 kotlin-coroutines-reactive)函数和 subscribe()(来自 Reactor)之间的区别。我举了两个例子来说明我想要做什么。
示例 1(带等待功能):
@Test
internal fun test() = runBlockingTest {
Mono.error<String>(IllegalStateException("exception"))
.doOnError {
print("error")
}.awaitFirst().let {
print("success")
}
}
输出:“错误”带有 IllegalStateException 堆栈跟踪。
示例 2(带订阅功能):
@Test
internal fun test() = runBlockingTest {
Mono.error<String>(IllegalStateException("exception"))
.doOnError {
print("error")
}.subscribe {
print("success")
}
}
输出: 只是“错误”。
为什么示例 1 显示堆栈跟踪而示例 2 不显示?
谢谢。
【问题讨论】:
-
在第一个示例中,您使用
awaitFirst明确要求第一个值并获得异常作为答案。在第二个示例中,您不请求任何内容,只需订阅并提供在每个收到的项目上运行的回调。
标签: kotlin project-reactor kotlin-coroutines