我需要一些在RxJava中实现并行异步调用的帮助。我选择了一个简单的用例,其中第一个调用获取(而不是搜索)要显示的产品(Tile)列表。随后的调用将获取(A)评论和(B)产品图像
经过几次尝试,我来到了这个地方。
1 Observable<Tile> searchTile = searchServiceClient.getSearchResults(searchTerm);
2 List<Tile> allTiles = new ArrayList<Tile>();
3 ClientResponse response = new ClientResponse();
4 searchTile.parallel(oTile -> {
5 return oTile.flatMap(t -> {
6 Observable<Reviews> reviews = reviewsServiceClient.getSellerReviews(t.getSellerId());
7 Observable<String> imageUrl = reviewsServiceClient.getProductImage(t.getProductId());
8 return Observable.zip(reviews, imageUrl, (r, u) -> {
9 t.setReviews(r);
10 t.setImageUrl(u);
11 return t;
12 });
13 });
14 }).subscribe(e -> {
15 allTiles.add((Tile) e);
16 });
第1行:获取要显示的产品(Tile)
第4行:我们获取可观察对象的列表,并将其分片以获取评论和imageUrls
6,7:获取可观察的评论和可观察的url
第8行:最后将两个可观察对象压缩,以返回更新后的可观察对象
第15行:最后,第15行整理了集合中要显示的所有单个产品,该集合可以返回给调用层
虽然观察点已经被切分,并且在我们的测试中运行了4个不同的线程;但获取评论和图像似乎是一个接一个的。我怀疑第8行上的zip步骤基本上导致了对两个观察值(review和url)的顺序调用。
这个小组是否有任何建议来并行获取评论和图像urls。本质上,上面附加的瀑布图应该看起来更垂直堆叠。对评论和图片的调用应该是并行的
谢谢阿南德·拉曼
https://stackoverflow.com/questions/26249030
复制相似问题