kotlin - 在 Kotlin 回调流构建器中捕获异常
问题描述
我有一个看起来像这样的消费者:
// ItemConsumer.kt
try {
job = itemService
.connect()
.flowOn(Dispatchers.IO)
.catch { e ->
throw e
}
.onEach {
// Update UI for each item collected
}
.launchIn(viewModelScope)
} catch (e : Exception) {
// Handle exception
}
我有一个看起来像这样的制片人:
// ItemService.kt (Producer)
fun connect():Flow<Item> = callbackFlow {
check(1 == 0) // This is expected to throw an IllegalStateException
}
我知道 .catch { } 将处理消费者的 .collect { } 或 .onEach { } 块内出现的任何问题。但是我怎样才能抛出 callbackFlow { } 构建器内部发生的异常,以便它可能被消费者的 .catch { } 捕获?
解决方案
你不能。流构建器函数永远不会抛出异常。Flow
s 是冷的,这意味着在调用 collect 之前不会执行任何代码。即使集合的执行产生异常,您也将始终成功构建流程。
推荐阅读
- html - Angular - 带索引的 *ngFor 循环
- java - 通过 Maven/Testng 通过动态自定义 TestNG 文件运行测试
- swift - 如何使用捆绑标识符将系统首选项启动到特定首选项窗格?
- c# - 如何在 Unity 中找到 2D 画布宽度的半径?
- c - C程序错误负输入不起作用
- python - 如何在 python 3 中将 unicode 字符转换为 \Uxxxxxxxx 格式
- python-3.x - 使用 UWSGI、Nginx、direnv 和 systemd 部署 Flask APP
- workload-scheduler - IDWC 9.4 中有没有办法为作业属性设置默认值
- android - 在具有多个视图类型的 Recycler 视图中,项目在向上滚动时重复
- javascript - 如何将多个对象转换为单个数组