本篇解析 example-flow-30.kt。学习一种能覆盖全流程异常处理的优雅写法。
1. 核心技巧:onEach + catch
为了让 catch 操作符能够捕获到原本在 collect 中的异常,我们可以通过以下重构方式:
重构步骤:
- 将
collect { ... }中的业务逻辑移动到onEach { ... }操作符中。 - 确保
onEach位于catch之前(上游)。 - 最后使用无参的
collect()启动流。
2. 代码解析
1 | simple() |
- 结果:这种链式调用非常整洁,所有的异常(生产、加工、消费)都被统一在
catch块中处理了。
3. 开发者感悟
这是我最推崇的一种 Flow 异常处理模式。它避免了嵌套 try-catch 块,让数据流处理变得纯粹、声明式。在 Android 的 ViewModel 或 Repository 中,这种模式能极大地提高代码的可维护性。