我有一个异步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)
    }
}

10-08 06:01