Мне нужна помощь в реализации параллельных асинхронных вызовов в RxJava. Я взял простой пример использования, в котором FIRST-вызов выбирает (скорее ищет) список продуктов (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: гаснет и выводит отображаемый продукт (плитка)
Строка 4: Мы берем список Observable и SHARD, чтобы отображать обзоры и imageUrls
Ли 6,7: выберите наблюдаемый обзор и наблюдаемый URL
Строка 8: Наконец, 2 наблюдаемых заархивированы, чтобы вернуть обновленный Observable
Строка 15: наконец, строка 15 сопоставляет все отдельные продукты, которые будут отображаться в коллекции, которая может быть возвращена обратно на вызывающий уровень
Пока Observable был оштрафован, и в наших тестах работают более 4 разных потоков; выборка отзывов и изображений, кажется, одна за другой. Я подозреваю, что шаг zip в строке 8 в основном вызывает последовательный вызов 2 наблюдаемых (обзоры и URL-адреса).
Есть ли у этой группы какие-либо предложения по параллельной выборке reiews и URL-адресов изображений. В сущности, приведенная выше диаграмма водопада должна выглядеть более вертикально. Обращения к отзывам и изображениям должны быть параллельны.
спасибо anand raman