首页 > 解决方案 > 干净架构层方法中的网络请求轮询逻辑布局

问题描述

根据 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()
                }
    }
}

标签: repositoryretrofitandroid-room

解决方案


推荐阅读