我正在开发一个全新的 android 应用程序,我想使用 Kotlin Flow 实现离线优先策略,就像我们使用 RxJava 一样。当我使用 Rx 时,我将以下代码用于离线优先功能。
private fun getOfflineFirst(param: Param): Observable<T> =
Observable.concatArrayEagerDelayError(
getOffline(param), getRemote(param)
getOffline 和 getRemote 函数将返回一个可观察对象。我使用下面的代码来使用 Flow 实现相同的结果。
private suspend fun getOfflineFirst(param: Param) = flow {
getLocal(param)
.onCompletion {
getRemote(param).collect {
emit(it)
}
}.collect { emit(it) }
}
getLocal 和 getRemote 将返回一个 Flow 对象。我还在我的一个游乐场项目中使用了另一种逻辑,如下所示:
suspend fun getResult(param: PARAM, strategy: QueryStrategy): Flow<ResultResponse> = flow {
if (strategy.isRemote()) {
emit(getRemoteResult(param))
} else {
emit(getLocalResult(param))
emit(getRemoteResult(param))
}
}
在“else”部分,它将先发出本地结果,然后发出远程,这就是我在这种情况下首次离线处理的方式。
但我不确定我是否使用了最好的方法。
有人可以建议我一些更好的方法吗?