Flow 完成:33. onCompletion 异常感知

本篇解析 example-flow-33.kt。探讨如何在完成回调中识别异常。

1. 核心特性:Throwable 参数

onCompletion 操作符提供了一个可选的 Throwable? 参数。

参数说明:

  • cause == null:表示流是正常处理完毕(所有元素发射并收集完成)。
  • cause != null:表示流是因为抛出了异常而提前终止。

2. 代码解析

1
2
3
4
5
6
simple()
.onCompletion { cause ->
if (cause != null) println("Flow completed exceptionally")
}
.catch { cause -> println("Caught exception") }
.collect { value -> println(value) }
  • 注意onCompletion 仅仅是“感知”到了异常。它不会捕获异常。异常依然会向下游传播,直到被 catchtry-catch 处理。

3. 开发者感悟

onCompletion 就像是一个监控摄像头,它只负责记录流是为什么结束的。如果你需要处理错误(如显示错误占位图),请配合 catch 使用。

,