es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combinación de flujo de KMM iOS: error de falta de bucle de eventos.

suspend fun heyStackOverFlow(): Int {
val flow1 = flow { 1 }
val flow2 = flow { 2 }
return flow1.combine(flow2) { f1, f2 -> f1 + f2 }.single()
}

Uso esto en build.gradle

sourceSets {
val commonMain by getting {
dependencies {
implementation(“org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2-native-mt”)

}
}
}

Obtengo este error

kotlin.IllegalStateException: No hay un ciclo de eventos. Utilice runBlocking { … } para iniciar uno.

He intentado jugar con los despachadores actual/esperado de otras preguntas pero sin éxito.
Esto funciona perfectamente en Android, pero no en iOS.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “kotlin.IllegalStateException: No hay un bucle de eventos. Usa runBlocking { … } para iniciar uno.” indica que el código está intentando usar coroutines pero no tiene un bucle de eventos para programar y ejecutar las coroutines.

    Para solucionar esto en iOS, puedes agregar runBlocking a tu función suspendida para crear un bucle de eventos y ejecutar las coroutines dentro de él. Aquí tienes un ejemplo:

    suspend fun heyStackOverFlow(): Int = runBlocking {
        val flow1 = flow<int> { 1 }
        val flow2 = flow<int> { 2 }
        flow1.combine(flow2) { f1, f2 -> f1 + f2 }.single()
    }
    

    Además, es posible que necesites agregar la biblioteca kotlinx-coroutines-core específica de iOS a tus dependencias en build.gradle. Aquí tienes un ejemplo:

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
                // agregar la dependencia específica de iOS:
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.5.2")
                ...
            }
        }
    }
    

    Al agregar esta biblioteca, deberías poder usar coroutines tanto en plataformas Android como iOS en tu proyecto Kotlin Multiplatform.

Comments are closed.