Flow 异常:28. Catch 声明式捕获

本篇解析 example-flow-28.kt。学习 Flow 提供的专门用于异常处理的操作符。

1. 核心操作符:catch

catch 操作符用于捕获并处理流中的异常。

特点:

  • 异常透明性:它只捕获上游发生的异常。
  • 恢复能力:在 catch 块中,你可以选择:
    1. 使用 emit 发射一个默认值或错误提示。
    2. 重新抛出异常。
    3. 记录日志并停止流。

2. 代码解析

1
2
3
simple()
.catch { e -> emit("Caught $e") } // 捕获上游异常并转换成一个正常的发射值
.collect { value -> println(value) }
  • 结果:当上游 map 报错时,catch 拦截了它,并发射了一个字符串 “Caught…”。收集端(collect)会像接收普通数据一样接收到这个字符串,程序不会崩溃。

3. 开发者感悟

catch 操作符让异常处理变得非常具有“流”的风格。它将错误处理也变成了数据流的一部分,这在构建响应式 UI 时非常优雅。

,