2016-08-04 2 views
1

Каков правильный оператор RxJava для следующего сценария:Что это за оператор RxJava?

Я хочу проверить, есть ли у меня токен, если он не получен из сети и использовать его для выполнения другого сетевого запроса.

Я думаю, что это должно быть сделано с and/then/when или с комбинацией filter и flatMap, но не знаете как.

+0

Заметим также, что 'cache' может быть полезным для кэширования сети запрошенный наблюдаемыми для пример. –

ответ

2

Существует много способов решить эту проблему. Еще одним общим решением будет Observable.concat.

// Our sources (left as an exercise for the reader) 
Observable<Data> memory = ...; 
Observable<Data> disk = ...; 
Observable<Data> network = ...; 

// Retrieve the first source with data 
Observable<Data> source = Observable 
    .concat(memory, disk, network) 
    .first(); 

Вам понадобятся два наблюдаемых для вашего случая. Если токен существует в локальном хранилище concat не будет подписываться на наблюдаемую сеть. Дополнительная информация в блоге.

Образец образца от this blog post.

1

Я не знаю, если это то, что you're ищет, но структурированы должно быть довольно просто

Observable.just(getToken()) 
     .filter(token->Strings.isNullOrEmpty(token)) 
     .map(this::findNewToken) 
     .cache() 
     .subscribe(token -> println("Your new Token")