【发布时间】:2018-09-04 04:34:26
【问题描述】:
我想将我的 rxJava 代码转换为 Kotlin CoRoutine。
下面的代码同时调用了 api 和 db 并将数据返回给 UI,无论哪个先出现。让我们说如果数据库响应恰好比 api 更快。在这种情况下,api 响应将继续,直到它接收到与 db 同步的数据,尽管它本可以更早地完成 UI 更新。
我该怎么做?
class MoviesRepository @Inject constructor(val apiInterface: ApiInterface,
val MoviesDao: MoviesDao) {
fun getMovies(): Observable<List<Movie>> {
val observableFromApi = getMoviesFromApi()
val observableFromDb = getMoviesFromDb()
return Observable.concatArrayEager(observableFromApi, observableFromDb)
}
fun getMoviesFromApi(): Observable<List<Movie>> {
return apiInterface.getMovies()
.doOnNext { it ->
it.data?.let { it1 -> MoviesDao.insertAllMovies(it1) }
println("Size of Movies from API %d", it.data?.size)
}
.map({ r -> r.data })
}
fun getMoviesFromDb(): Observable<List<Movie>> {
return MoviesDao.queryMovies()
.toObservable()
.doOnNext {
//Print log it.size :)
}
}
}
【问题讨论】:
标签: kotlin kotlin-extension kotlinx.coroutines