Ваша главная проблема в том, что вы не просите то, что вам действительно нужно.Код, который вы написали, запускает сопрограмму, приостанавливает ее, а затем блокирует, пока это не будет сделано.Это абсолютно равносильно отсутствию сопрограмм и простому блокированию сетевого запроса, чего вы не можете ожидать от 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)
}