【发布时间】:2021-04-21 11:25:51
【问题描述】:
如果有一种干净的方法可以在 Kotlin 中启动一系列流程,然后在解决它们之后,根据它们是否成功执行进一步的操作,我正在徘徊
例如,我需要从数据库中读取所有整数(将它们返回到流中),根据外部 API(也返回流)检查它们是偶数还是奇数,然后从数据库中删除奇数
在代码中会是这样的
fun findEven() {
db.readIntegers()
.map { listOfInt ->
listOfInt.asFlow()
.flatMapMerge { singleInt ->
httpClient.apiCallToCheckForOddity(singleInt)
.catch {
// API failure when number is even
}
.map {
// API success when number is odd
db.remove(singleInt).collect()
}
}.collect()
}.collect()
}
但是我在这段代码中看到的问题是访问数据库并删除并行完成的条目,我认为更好的解决方案是运行所有 API 调用并在某处收集所有失败的和成功的,所以要能够只在数据库中进行一次批量插入,而不是让多个协程自己进行此操作
【问题讨论】:
-
readIntegers返回什么?Flow<List<Int>>? -
是的(我试图用闭包中给出的名称来指定它)
标签: kotlin concurrency kotlin-coroutines kotlin-flow