Я пытаюсь создать наблюдаемую информацию, которая может генерировать данные как из источника данных local
, так и из источника данных remote
. Удаленный может подождать из-за недоступности подключения, в этом случае мне придется подождать, пока соединение не восстановится, и затем повторить попытку. В то же время я должен немедленно доставить локальные данные, если таковые имеются. Конечно, и локальные, и удаленные могут доставлять ошибки (данные не кэшируются, ошибка http, ...)
Подписка на наблюдаемое, возвращаемое combineObservables
, работает как задумано, однако я хотел бы знать, если кто-нибудь знает лучший способ сделать это или может обнаружить любые проблемы с моим кодом.
val local = localDataSource
.getData(id)
.subscribeOn(Schedulers.io())
val remote = remoteDataSource
.getData(id)
.subscribeOn(Schedulers.io())
fun <T: Any>combineObservables(local: Single<T>, remote: Single<T>) : Observable<T> {
return Observable
.interval(0, NETWORK_AVAILABILITY_CHECK_RATE_MS, TimeUnit.MILLISECONDS)
.filter { connectivityChecker.check() }
.take(1)
.flatMap { remote.toObservable() }
.startWith(local.toObservable())
.debounce(DEBOUNCE_TIME_MS, TimeUnit.MILLISECONDS)
}