如何解决一次下载多个项目完成所有操作后返回结果
我正在尝试一次下载多个项目。
假设我要下载10个项目,而每个项目要花1秒才能下载,我不希望它花10秒,而是1。
听起来像协程问题,对吧?
现在,它看起来像:
suspend fun getLanguageDictionaryDeferred(language: String): Result<JSONObject> {
val namespacesResponse = api.getNamespaces(language)
return if (namespacesResponse.isSuccessful) {
Result.success(getJson(namespacesResponse.body(),language))
} else {
Result.error("Error: ${namespacesResponse.code()}")
}
}
private suspend fun getJson(namespaces: List<Namespace>?,language: String): JSONObject {
val jsonObject = JSONObject()
namespaces?.forEach {
load(it,language)
}
return jsonObject
}
我认为问题出在这些功能上。我需要异步下载它们,但只要完成下载,便会通知结果。
我当时想这可能是getJson
对象的Deferred
函数调用await
函数的问题。但是,我将如何立即致电并立即等待它们呢?如果我不知道forEach
循环中的项目数怎么办?
谢谢!
编辑:
在进行测试时,我发现我们可以等待所有这样的事情:(尽管花费相同)
private suspend fun getJson(namespaces: List<Namespace>?,language: String): JSONObject {
val jsonObject = JSONObject()
namespaces?.map { async { load(it,language) } }?.awaitAll()
return jsonObject
}
但是,我不确定这样做是否正确并显示警告:
Ambiguous coroutineContext due to CoroutineScope receiver of suspend function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。