Возможен ли следующий сценарий в потоке RxJava для шаблона репозитория?
- Получить данные из API, если срок действия кэша (Room DB) истек. Возвращает одиночный.
- Сохраняет удаленные данные в кэш, если был сетевой вызов. Возвращает Completable.
- Кеш будет единственным источником правды, поэтому всегда загружайте данные из кеша. Возвращает Flowable.
- Если в какой-то момент произошла ошибка, и кэш пуст, вернуть исключение как есть, чтобы ошибка могла постоянно отображаться в пользовательском интерфейсе.
- Если в какой-то момент произошла ошибка и кэш не пуст, верните исключение в исключении оболочки, которое будет отображать временную ошибку в Снэк-баре.Затем вернемся к отображению данных устаревшего кэша.
- Это должно позволить мне отображать панель загрузки во время загрузки или загрузки кэша, поэтому я чувствую, что это должен быть один поток.
Все мои попытки этого не удаются в части сообщения об ошибках, потому что к исходному исключению можно получить доступ только во что-то вроде onErrorResumeNext
, где я не могу вернуть ни ошибку, ни список данных для 5-го пункта,так как ошибка остановит поток.
Если вышеупомянутое возможно, был бы также хороший способ предотвратить удержание пользователя шестой точкой, если ранее уже была неудачная загрузка?
например
- Кэш устарел, поэтому для загрузки данных требуется сетевой вызов.
- Сервер не работает, и время ожидания запроса истекает через 10 секунд.
- Кэш возвращается через 10 секунд с ошибкой Snackbar.
- Пользователь обновляется, и сервер все еще не работает, поэтому кэш загружается через 10 секунд снова.
Поддержание актуальности кэша не критично, поэтому было бы предпочтительнее отложить проверку API еще раз, если он уже один раз вышел из строя.
Такое ощущение, что яможет быть чего-то не хватает.