我需要在异步回调中返回一个值。这个值是作为 websocket 确认异步获取的,在检索到该值之前,我找不到阻止该回调执行的方法......我已经尝试了所有协程组合,但无济于事。
override fun someAsyncCallback() : String
{
var myAsyncValue = ""
socket.emit(event = "someEvent", callback = { result ->
//This is an asynchronous callback
myAsyncValue = result
})
//Insert way to wait for the async value to be set
return myAsyncValue
}
据推测,该函数是从可以阻止的线程调用的。您可以使用CountDownLatch来等待它。
override fun someAsyncCallback() : String
{
var myAsyncValue = ""
val latch = CountDownLatch(1)
socket.emit(event = "someEvent", callback = { result ->
myAsyncValue = result
latch.countDown()
})
latch.await()
return myAsyncValue
}
还可以将超时传递给latch.await()
方法,这样它就不会无限期地阻止。