我有一个异步CoroutineScope
,其中(根据条件)可以是对子函数的调用,该子函数将在异步Unit
中返回其结果
我如何等待返回的结果并将其返回到async Unit
之外。因此,等待子功能对Unit
的调用。
例:
GlobalScope.launch {
var value: Int = 0
if (condition) {
// the subFunction has a Unit<Int> as return type
subFunction() { result ->
value = result
}
}
Log.v("LOGTAG", value.toString())
}
在继续执行代码之前,如何等待
subFunction
完成执行,或者直接将结果值分配给变量?subFunction
一定不能将作为suspend
函数,但是可以将其嵌入到辅助函数中。(代码必须在Android环境中运行)
最佳答案
您可以这样做,将回调转换为暂停函数
GlobalScope.launch {
var value: Int = 0
if (condition) {
// the subFunction has a Unit<Int> as return type
value = subFunctionSuspend()
}
Log.v("LOGTAG", value.toString())
}
suspend fun subFunctionSuspend() = suspendCoroutine { cont ->
subFunction() { result ->
cont.resume(result)
}
}