在 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= 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= flow { emit(1) emit(2) throw RuntimeException("流处理异常") emit(3) }
在这两个示例中,我们都创建了一个简单的流,该流在发射第三个值时会抛出一个异常。在第一个示例中,我们使用 catch
操作符捕获异常并处理它。在第二个示例中,我们使用 onEach
操作符处理每个值,并在其中使用 try-catch
语句来捕获和处理异常。