Rx Java объединение синглов для локального и удаленного источника данных - PullRequest
1 голос
/ 18 января 2020

Я пытаюсь создать наблюдаемую информацию, которая может генерировать данные как из источника данных 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)
}
...