repository - 干净架构层方法中的网络请求轮询逻辑布局
问题描述
根据 mvvm/clean 架构层方法,轮询请求的逻辑应该放在哪里(数据源、存储库、用例或视图模型)。例如:
fun pollSomeStatus(): Single<StatusDto> {
var count = 0L
var isResultObtained = false
return firstRoomDataSource
.getLastData()
.flatMap { data ->
Observable
.interval(0, 5, TimeUnit.SECONDS)
.doOnNext {
count = it
}
.takeUntil { count > 30}
.timeout(30, TimeUnit.SECONDS)
.flatMap {
return@flatMap Observable.create<StatusDto> { emitter ->
emitter.onNext(secondRetrofitDataSource.getData(data.id).blockingGet())
emitter.onComplete()
}
}
.takeWhile { !isResultObtained }
.doOnNext{ isResultObtained = checkResult(it) }
.toList()
}
}
}
解决方案
推荐阅读
- ios - SwiftUI 在数据模型中设置默认值
- c++ - 我不明白为什么这个解决方案有效。(整数溢出)
- c - C ABI 浮点结构作为参数
- python - Pandas:列计数不同列中值的有序出现
- ngx-bootstrap - 在已经选择了一些值之后,ngx-bootstrap typeahead 是否仍有可能提供更多值的建议?
- django - 如何使用 Django 在首页创建搜索栏,然后重定向到搜索结果?
- r - 如何使用熔化或聚集功能将 6 个特定列堆叠在 2 列中?
- reactjs - React 多文件上传器组件重复上传文件
- terraform - EC2 资源的 Terraform 动态标记失败,并显示“此处不应出现“标签”类型的块”
- c++ - 如何在 C++ 中打印具有第一个和第二个 2 类的对向量?