Я хочу сделать запрос HTTP повторно и действовать на результат. Я начинаю с public Observable<NewsItem> fetchItems(NewsFeed feed)
. Один запрос получает несколько новостей, но я решил сгладить его.Как связать асинхронные операции с использованием Java RX Observable?
Идея состояла в том, чтобы использовать Observable.interval()
сделать запрос несколько раз, а затем объединить полученные Observables в один.
Observable
.interval(timePerItem, TimeUnit.MILLISECONDS)
.map(i -> feed)
.map(feed -> fetchItems(feed))
.subscribe(result -> System.out.println(result));
Но результат Observable<Observable<NewsItem>>
не Observable<NewsItem>
. Как их вывести?
Я нашел оператора marge() (RX-Java doc: Marge). Но, похоже, это не подходит для использования.
В предыдущей версии я использовал CompletableFuture<List<NewsItem>> fetchNewsItems()
, но я не смог поместить его в цепь Observable.
Похоже, это то, что я искал. Изучение rx-java из https://github.com/ReactiveX/RxJava/wiki сложно. flatMap не упоминается во введении и способ, описанный в https://github.com/ReactiveX/RxJava/wiki/Transforming-Observables#flatmap-concatmap-and-flatmapiterable, является странным. Спасибо! – atok
Есть еще много ссылок на большие учебники по адресу http://reactivex.io/tutorials.html. И если вы найдете хороший учебник, который еще не упоминается там, или вы его сами написали, сделайте запрос на растяжение на https://github.com/ReactiveX/reactivex.github.io, чтобы ссылка была включена на эту страницу;) –