kotlin - 将 suspendCancellableCoroutine 转换为callbackFlow

标签 kotlin kotlin-coroutines coroutine kotlin-flow

我有以下功能。

 suspend fun result() = suspendCancellableCoroutine<Int> {continuation ->
      val callback = object : Callback {
            continuation.resume(value)
      }
 }

然后我在协程中调用结果,如下所示:

 someCoroutine {
     when (result()){
          x -> doSomething
          y -> doSomething
           ...
     }
 }

它有效,但再次调用时我不断收到错误:

未捕获的异常:已恢复,但建议更新。

我想我需要一个callbackFlow,但我不太确定如何实现它。这是我到目前为止所拥有的。

 suspend fun result() = callbackFlow<Int> {
      val callback = object : Callback {
            trySendBlocking(value)
      }
      awaitClose()
 }

我猜我必须使用collect(),但我不知道如何在协程中处理它。任何帮助将不胜感激。

最佳答案

要使用 Flow 发出的值,您需要使用 terminal operators 之一,例如收集:

coroutineScope.launch {
   result().collect { value ->
       when (value) {
          x -> doSomething
          y -> doSomething
          ...
       }
   }
}

关于kotlin - 将 suspendCancellableCoroutine 转换为callbackFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73962794/

相关文章:

带发布的Spring WebMvcTest返回403

kotlin - 覆盖 Kotlin 数据类的 getter

kotlin - Kotlin 协程中的 main-safe 是什么?

android - Kotlin 协程返回字符串

android - Kotlin Coroutines如何实现正确调用api

c++ - 如何使用 co_return 从协程返回值?

python - Tornado :线程未在协程中使用 @run_on_executor 启动

arrays - Kotlin 中的二维 Int 数组

python - 在 python 增强生成器中避免 "exception ignored"

Android Room Kotlin - 后台线程查询 - 返回值问题