在 Kotlin 中,处理流(Flow)中的异常主要有两种方法:使用 catch
操作符或使用 onEach
和 launchIn
结合 try-catch
方法 1:使用 catch
操作符
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
simpleFlow()
.catch { e -> println("捕获到异常: $e") }
.collect { value -> println("收集到的值: $value") }
}
fun simpleFlow(): Flow<Int> = flow {
emit(1)
emit(2)
throw RuntimeException("流处理异常")
emit(3)
}
方法 2:使用 onEach
和 launchIn
结合 try-catch
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
simpleFlow()
.onEach { value ->
try {
// 在这里处理值,可能会抛出异常
println("收集到的值: $value")
} catch (e: Exception) {
println("捕获到异常: $e")
}
}
.launchIn(this)
}
fun simpleFlow(): Flow<Int> = flow {
emit(1)
emit(2)
throw RuntimeException("流处理异常")
emit(3)
}
在这两个示例中,我们都创建了一个简单的流,该流在发射第三个值时会抛出一个异常。在第一个示例中,我们使用 catch
操作符捕获异常并处理它。在第二个示例中,我们使用 onEach
操作符处理每个值,并在其中使用 try-catch
语句来捕获和处理异常。