温馨提示×

Kotlin流如何处理异常

小樊
82
2024-11-03 06:08:44
栏目: 编程语言

在 Kotlin 中,处理流(Flow)中的异常主要有两种方法:使用 catch 操作符或使用 onEachlaunchIn 结合 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:使用 onEachlaunchIn 结合 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 语句来捕获和处理异常。

0