Flow 异常:26. 基础异常捕获

本篇解析 example-flow-26.kt。学习如何处理 Flow 收集过程中的异常。

1. 核心概念:try-catch 块

Flow 的收集过程(collect)本质上是在协程中运行的。因此,你可以像处理普通挂起函数一样,使用传统的 try-catch 来包裹 collect

2. 代码解析

1
2
3
4
5
6
7
8
try {
simple().collect { value ->
println(value)
check(value <= 1) { "Collected $value" } // 模拟处理过程中的逻辑异常
}
} catch (e: Throwable) {
println("Caught $e") // 能够成功捕获到来自 collect 内部的异常
}

3. 开发者感悟

这种捕获方式是最直观的。它不仅能捕获发射端(emit)抛出的异常,也能捕获收集端(collect 逻辑块)抛出的异常。在简单的业务场景下,这是最可靠的选择。

,