一次下载多个项目完成所有操作后返回结果

问题描述

我正在尝试一次下载多个项目。

假设我要下载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 (将#修改为@)