小编Ahm*_*twa的帖子

使用 kotlin co 例程从单个函数返回多次

在此 Repository 类中,只有一个称为 getMovies 的公共函数,直接从 useCase 类调用。

现在的问题是我希望这个函数从一次调用中多次返回 movieData ,首先我想从数据库本地获取数据并返回它,然后从远程获取并执行一些逻辑&在逻辑结束后我也想返回最终的值我如何用协程来做到这一点。

整个解决方案位于 getMovies func 的返回行中。

注意:这可以使用 liveData 或 rx 来完成,但我不想使用它们中的任何一个,因为通过所有这些以 viewModel 结尾的层传递 livedata 并不是一个好主意。

这是回购类:

@Singleton
class MovieRepository @Inject constructor(
        private val movieDao: MovieDao,
        private val movieApi: MovieApi,
        private val trailerApi: TrailerApi) : BaseRepository() {

    suspend fun getMovies(): ArrayList<Movie> {
        val localData = fetchMoviesLocal()
        val remoteData = fetchMoviesRemote()
        val syncedData = storeMoviesLocal(remoteData)
        return localData then syncedData
    }

    private fun fetchMoviesLocal(): ArrayList<Movie> = movieDao.fetchAllMovies()

    private suspend fun fetchMoviesRemote(): ArrayList<Movie>? {
        val data …
Run Code Online (Sandbox Code Playgroud)

android repository kotlin clean-architecture kotlin-coroutines

2
推荐指数
1
解决办法
2077
查看次数