Я ищу пример потока, который я пытаюсь реализовать с помощью RxJava.Запросы и кеширование RxJava
Предположим, я хочу показать список данных. Поток должен выглядеть примерно так:
- Прочитать кэш. Если он содержит данные, покажите его;
Отправить запрос API к серверу:
Если он вернулся данные, а затем кэшировать его и показать его.
Если оно вернулось и ошибка, и не было кэшированных данных, тогда отобразите ошибку.
Если он вернулся и ошибка, и там что-то было кешировано, тогда ничего не делайте.
Прямо сейчас у меня есть method that does something similar (с большим количеством вдохновения от Jake's u2020). Основное различие заключается в том, что он использует кэширование в памяти, что означает, что нет необходимости в отдельном Observable
для чтения из кеша, и это можно сделать синхронно.
Я не знаю, как объединить два наблюдаемых (один для чтения из кеша, а другой для вызова API) и получить описанный выше поток.
Любые предложения?
Похоже, вам нужна 'amb': https://github.com/ReactiveX/RxJava/wiki/Conditional-and-Boolean-Operators#amb – zsxwing
@zsxwing вы могли бы привести пример?Я открыт для предложений, хотя я нашел ответ (что не идеально). –
Я хотел бы оставить обработку кэша сетевым клиентом. Если вы используете HTTP, в ответе есть заголовок, который предназначен для указания клиенту, какой тип кеша должен быть реализован, как долго должен сохраняться объект ... Не говоря уже о том, что есть также возможность проверить, что ваш кеш по-прежнему действительны и при необходимости обновлять (код возврата 304). – njzk2