Koltin 流程 - 单个任务的异常处理

时间:2021-02-22 16:26:13

标签: android kotlin kotlin-coroutines

最近在探索 Kotlin Flows 时,我尝试实现一个功能,我想在其中运行 10 个任务作为 Flows 的一部分。 我无法弄清楚的一件事是如何处理异常并重试单个任务。

这是相同的示例伪代码。

{
    "file": "plugins/cordova-plugin-file/www/requestFileSystem.js",
    "id": "cordova-plugin-file.requestFileSystem",
    "pluginId": "cordova-plugin-file",
    "clobbers": [
        "window.requestFileSystem"
    ]
}

现在我关注的是如何为可能失败的操作之一添加重试机制。而不是要重新启动整个流程。

我看到可以使用 listOfOperations.asFlow().map { // Do request here (this would throw exception for some operations }.collect { // Do something with output } 。但这最终重新启动了整个流程。

1 个答案:

答案 0 :(得分:0)

假设 listOfOperations 是一些输入数据列表...为什么不创建“子流”,使用 retry 然后将结果流展平?

listOf("a", "b").asFlow().map { data ->
    flow {
        emit(someOperation(data)
    }.retry(3)
}.flattenConcat()