1 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
我認(rèn)為這應(yīng)該有效。
我們首先獲取藝術(shù)家并映射響應(yīng)。在映射期間,我們獲取每個(gè)專輯封面并獲得一個(gè)List<Mono<Cover>>塊。
然后我們將它們合并到一個(gè)中,當(dāng)它們可用時(shí)Flux#merge將發(fā)出每個(gè)。Cover所以我們可以在每個(gè)上發(fā)出doOnNext并將它們附加到藝術(shù)家。
完成后,我們只需then返回藝術(shù)家對(duì)象。
在這些事件鏈之后,我們可以doOnSuccess第二次獲取并將更多信息附加到Artist對(duì)象。
public Mono<Artist> getArtistInfo(String id) {
return webClient.get()
.uri("/artist")
.retrieve()
.bodyToMono(ArtistResponse.class)
.flatMap(artistResponse -> {
final Artist artist = new Artist();
return Flux.fromIterable(artistResponse.getAlbums())
.parallel(2)
.runOn(Schedulers.parallel())
.map(albums -> webClient.get()
.uri("artist/albums")
.retrieve()
.bodyToMono(Covers.class))
.doOnNext(coversMono -> coversMono
.doOnSuccess(covers -> artist.getAlbums().add(covers)))
.thenReturn(artist);
})
.doOnSuccess(artist -> webClient.get()
.uri("/artist/profile")
.retrieve()
.bodyToMono(Profiles.class)
.doOnSuccess(profiles -> artist.setDescription(profiles.getDescription())));
}
沒(méi)有運(yùn)行代碼,所以不能保證它,但至少它會(huì)給你一些洞察力,并在路上邁出一步。
添加回答
舉報(bào)