【发布时间】:2021-09-06 12:22:15
【问题描述】:
我正在使用协程进行网络调用,想知道是否有更好的方法来进行带有挂起的网络调用。
要求是:
- 调用网络 API
- 在收到响应之前暂停执行
- 根据 API 响应采取行动
活动:
private fun prepareUnlockUrl(url: String) {
CoroutineScope(Dispatchers.IO).launch {
val result = async { mViewModel.requestAccess(url) }
when (result.await()) {
Log.i(TAG, "do something with 'result'")
}
}
}
ViewModel 包括:
suspend fun requestAccess(url: String): Response {
return suspendCoroutine { continuation ->
// Do network call and get response
continuation.resume(response)
}
}
【问题讨论】:
-
取决于您使用的网络 API。它可能内置了对协程的支持。
-
这是一个使用改造 + 存储库模式的内部 API