我有以下功能。
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/