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())));
}
没有运行代码,所以不能保证它,但至少它会给你一些洞察力,并在路上迈出一步。
添加回答
举报