Kotlin流如何處理異常

小樊
81
2024-11-03 06:08:44

在 Kotlin 中,處理流(Flow)中的異常主要有兩種方法:使用 catch 操作符或使用 onEachlaunchIn 結(jié)合 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 結(jié)合 try-catch

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun main() = runBlocking {
    simpleFlow()
        .onEach { value ->
            try {
                // 在這里處理值,可能會(huì)拋出異常
                println("收集到的值: $value")
            } catch (e: Exception) {
                println("捕獲到異常: $e")
            }
        }
        .launchIn(this)
}

fun simpleFlow(): Flow<Int> = flow {
    emit(1)
    emit(2)
    throw RuntimeException("流處理異常")
    emit(3)
}

在這兩個(gè)示例中,我們都創(chuàng)建了一個(gè)簡(jiǎn)單的流,該流在發(fā)射第三個(gè)值時(shí)會(huì)拋出一個(gè)異常。在第一個(gè)示例中,我們使用 catch 操作符捕獲異常并處理它。在第二個(gè)示例中,我們使用 onEach 操作符處理每個(gè)值,并在其中使用 try-catch 語(yǔ)句來(lái)捕獲和處理異常。

0