gpt4 book ai didi

kotlin - 定位JavaScript时在Kotlin协程中使用runBlocking?

转载 作者:行者123 更新时间:2023-12-02 13:22:29 25 4
gpt4 key购买 nike

有没有办法在下面编写Kotlin代码,以便在JVM和JavaScript中以相同的方式编译和工作?

fun <A: Any> request(request: Any): A  = runBlocking {
suspendCoroutine<A> { cont ->
val subscriber = { response: A ->
cont.resume(response)
}
sendAsync(request, subscriber)
}
}


fun <Q : Any, A : Any> sendAsync(request: Q, handler: (A) -> Unit) {

// request is sent to a remote service,
// when the result is available it is passed to handler(... /* result */)

}

该代码可编译并在针对JVM进行编译时运行良好。
由于不存在函数runBlocking,因此在定位JavaScript时会发出编译错误

最佳答案

您的主要问题是您没有要求实际需要的东西。您编写的代码将启动协程,将其挂起,然后阻塞直到完成。这完全等同于根本没有协程,而只是发出阻塞的网络请求,这是您不可能期望JavaScript允许的。

您实际上要做的是退回到request()的调用站点,并将其包装在launch中:

GlobalScope.launch(Dispatchers.Default) {
val result: A = request(...)
// work with the result
}

通过此操作,您可以将请求功能重写为
suspend fun <A: Any> request(request: Any): A = suspendCancellableCoroutine {
sendAsync(request, it::resume)
}

关于kotlin - 定位JavaScript时在Kotlin协程中使用runBlocking?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52393252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com