Flow 完成:34. onCompletion 观察所有异常

本篇解析 example-flow-34.kt。探讨 onCompletion 在感知异常方面的优势。

1. 核心特性:全方位观察

catch 操作符只能捕获上游异常不同,onCompletion 能够观察到所有导致流结束的异常(包括上游、中间操作符以及下游 collect 里的异常)。

2. 代码解析

1
2
3
4
5
6
simple()
.onCompletion { cause -> println("Flow completed with $cause") }
.collect { value ->
check(value <= 1) { "Collected $value" } // 这里抛出的异常也会被 onCompletion 看到
println(value)
}
  • 注意:虽然它能看到下游的异常,但它依然不捕获它。程序仍会因为这个异常而报错。

3. 开发者感悟

onCompletion 就像是一个“黑匣子”飞行记录仪。无论流是因为什么原因坠毁的,它都能把最后的异常状态记录下来。这对于问题排查和日志分析非常有价值。

,