webfluxコード内で非同期メソッドの結果を待つ方法があります

0ggmr0:

私は春のIntelliJのアイデアを開発するwebflux使用し、そして今私はこの問題は、私の方法では、私は私は私の要求を転送するよりも、反応性のMongoからIP(String)を取得する必要があるということです満たしています。
私はこのコードを書いたように、

@Autowird
private XXRepository repository;

public Mono<Void> xxxx(ServerWebExchange exchange, String symbol) {
    StringBuilder builder = new StringBuilder();
    String ip = repository.findBySymbol(symbol)
                          .map(xxxxx)
                          .subscribe(builder::append)
                          .toString();
    WebClient.RequestBodySpec forwardRequestInfo = webClient.method(httpMethod)
                .uri(ip);

    xxxxxxx //setting http msg
    WebClient.RequestHeadersSpec<?> forwardRequest;
    return forwardRequest.exchange();
}

私の質問私の方法は、このMongoの実行を待機していないので、このコードは、他のスレッドで実行されることで、私は、私の方法では、このIPアドレスを取得することはできません

String ip = repository.findBySymbol(symbol)
                          .map(xxxxx)
                          .subscribe(builder::append)
                          .toString();

ので、私は私の方法では、すぐにIP得ることができる方法はありますか?

Yauhen Balykin:

あなたの建設は非常に汚いハックです、それをしないと反応ストリーム内の任意の副作用の操作を避けるようにしてください。
だから、あなたは自分の事業者は、次のようにチェーンする必要があります。

return repository.findBySymbol(symbol)
                      .map(xxxxx)
                      .map(ip -> webClient.method(httpMethod).uri(ip))
                      ...
                      flatMap(param -> forwardRequest.exchange())

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=378928&siteId=1