第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我如何等待 List<Mono> 得到解決?

我如何等待 List<Mono> 得到解決?

慕容森 2023-02-23 16:49:21
我希望能夠等待 Monos 列表得到解決,并在完成最后一個(gè)元素后,繼續(xù)進(jìn)行另一個(gè)異步調(diào)用public Mono<Artist> getArtistInfo(String id) {    //Call API1    Mono<MusicResponse> musisResponseMono = webClientBuilder                                                .build()                                                .get()                                                .uri(uri + "\\" + id)                                                .retrieve()                                                .bodyToMono(MusicResponse.class);    //1.async handler for the first call    return musisResponseMono.flatMap(musicRes ->{        Artist artist = new Artist();        List<Albums> albums = musicRes.getAlbums();        //make mutiple concurrent API calls to API2        albums.stream().forEach( album -> {            webClientBuilder                .build()                .get().uri("API 2 URL")                .retrieve()                .bodyToMono(Covers.class)                .subscribe(cover -> artist.getAlbums().add(cover.getImage()));        });        //call API3 - want to wait untill all API calls 2 are completed        return webClientBuilder            .build()            .get()            .uri("API3 URL")            .retrieve()            .bodyToMono(Profiles.class)            .map( profileRes ->                artist.setDescription(profileRes.getDescription())            );    }    }問(wèn)題是 API 調(diào)用 3 可能在返回第二個(gè)調(diào)用的每個(gè)元素之前返回。我想我正在尋找的是 Spring Webflux 上下文中 Javascipt 中的 asycn await 之類的東西
查看完整描述

1 回答

?
嗶嗶one

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ì)給你一些洞察力,并在路上邁出一步。


查看完整回答
反對(duì) 回復(fù) 2023-02-23
  • 1 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)