1 回答

TA貢獻1854條經驗 獲得超8個贊
我認為這應該有效。
我們首先獲取藝術家并映射響應。在映射期間,我們獲取每個專輯封面并獲得一個List<Mono<Cover>>塊。
然后我們將它們合并到一個中,當它們可用時Flux#merge將發出每個。Cover所以我們可以在每個上發出doOnNext并將它們附加到藝術家。
完成后,我們只需then返回藝術家對象。
在這些事件鏈之后,我們可以doOnSuccess第二次獲取并將更多信息附加到Artist對象。
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())));
}
沒有運行代碼,所以不能保證它,但至少它會給你一些洞察力,并在路上邁出一步。
添加回答
舉報