在 Kotlin 中,處理流(Flow)中的異常主要有兩種方法:使用 catch
操作符或使用 onEach
和 launchIn
結(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:使用 onEach
和 launchIn
結(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)捕獲和處理異常。