如何在RxJava中的onSuccess案例中执行其他逻辑

时间:2018-07-20 11:39:44

标签: android kotlin rx-java rx-java2 mvp

我正在开发一个Android应用程序。 使用RxJava。

它将到期时间将用户数据存储在本地数据库中。

首先,它从本地数据库获取用户数据。 并检查到期时间,如果数据是旧数据,那么它将从远程服务器获取用户数据并将其更新到本地数据库。

fun getPlayer(playerId: String): Single<Player> {
    return playerDao.getPlayer(playerId)
            .doOnSuccess { // "doOnSuccess" is right? what method should I use?
                if (PlayerUtil.isNeededUpdate(it)) {
                    Log.d(TAG, "getPlayer(local) - old!")
                    getPlayerFromRemote(playerId)
                    // How can I return Observable/Flowable/Single in here?
                    // (case of need to update data)
                }
            }
            .onErrorResumeNext {
                // If local database has no player, then it try to get it from remote server
                Log.d(TAG, "getPlayer(local) - onError: ${it.message}")
                getPlayerFromRemote(playerId)
            }
}

1 个答案:

答案 0 :(得分:2)

doOnSuccess仅用于副作用,而不是影响流本身的动作。

您要查找的是flatMap,如果不需要执行任何操作,则只返回标量值:

.flatMap {
    if (PlayerUtil.isNeededUpdate(it)) {
        getPlayerFromRemote(playerId)
    } else {
        Single.just(it)
    }
}