Сочетание получения ценности от SharedPrefs и сети с RxJava

Как лучше всего объединить эти операции с RxJava:

  1. Получить токен авторизации из общих настроек
  2. Если он не существует или недействителен, получите его с сервера.
  3. Выполните запрос с допустимым.

person RCB    schedule 07.10.2015    source источник


Ответы (1)


Предположим, у вас есть две наблюдаемые, одна из которых возвращает AuthToken из общих префов, а другая возвращает AuthToken с сервера:

Observable<AuthToken> authTokenFromPrefs = ...;
Observable<AuthToken> authTokenFromServer = ...;

Затем создайте наблюдаемую из двух вышеприведенных, которая использует AuthToken и возвращает результаты вызова службы:

Observable<T> results = 
  authTokenFromPrefs
    .filter(AuthToken::isValid)
    .switchIfEmpty(authTokenFromServer)
    .flatMap(authToken -> callService(authToken));
person Dave Moten    schedule 07.10.2015
comment
И тогда фактический вызов должен быть выполнен с помощью «flatMap»? Превратить наблюдаемую авторизацию в наблюдаемую по вызову, верно? - person RCB; 08.10.2015
comment
Да, конечно, ты мог бы это сделать. Я обновил ответ с возможным использованием. - person Dave Moten; 08.10.2015
comment
@DaveMoten: switchIfEmpty помечен как @Experimental. Вы предлагаете использовать его? - person rciovati; 08.10.2015
comment
Ага, используй. Он останется, я бы сказал. - person Dave Moten; 08.10.2015