如何使用Java RX Observable链接异步操作?

时间:2014-11-16 16:07:30

标签: java rx-java

我想重复发出HTTP请求并对结果采取行动。我从public Observable<NewsItem> fetchItems(NewsFeed feed)开始。一个请求获得了一些新闻,但我决定将其压扁。

这个想法是使用Observable.interval()多次发出请求,然后将结果Observable合并为一个。

       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链中。

1 个答案:

答案 0 :(得分:3)

不确定我是否理解这个问题,但您不只是在寻找flatMap吗?

Observable
    .interval(timePerItem, TimeUnit.MILLISECONDS)
    .flatMap(i -> fetchItems(feed))
    .subscribe(result -> System.out.println(result));