我想使用 Flow 作为存储库中所有函数的返回类型。例如:
suspend fun create(item:T): Flow<Result<T>>
此函数应调用 2 个数据源:远程(将数据保存在服务器上)和本地(将服务器返回的数据保存在本地)。问题是我如何实现这个场景:
- 尝试使用 RemoteDataSource 保存数据
- 如果 1. 失败 - 尝试 N 次 M 超时
- 如果数据最终从服务器返回 - 在本地与 LocalDataSource 相同
- 使用本地保存的数据返回流
RemoteDataSource 和 LocalDataSource 都有create
相同的签名:
suspend fun create(item:T): Flow<Result<T>>
所以它们都返回数据流。如果您对如何实施它有任何想法,我将不胜感激。
------ 更新 #1 ------
可能解决方案的一部分:
suspend fun create(item:T): Flow<T> {
// save item remotely
return remoteDataSource.create(item)
// todo: call retry if fails
// save to local a merge two flows in one
.flatMapConcat { remoteData ->
localDataSource.create(remoteData)
}
.map {
// other mapping
}
}
这是一个可行的想法吗?