Есть ли способ ждать результата метода asyn c в коде webflux - PullRequest
0 голосов
/ 30 марта 2020

Я использую Spring webflux для разработки с идеей Intellij, и теперь я сталкиваюсь с проблемой в том, что в моем методе мне нужно получить ip (String) от реактивного пн go, чем я буду перенаправлять мой запрос。
поэтому я написал этот код

@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();
}

мой вопрос заключается в том, что этот код будет выполняться в другом потоке, я не могу получить этот ip в своем методе, потому что мой метод не будет ожидать этого выполнения mon go

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

так есть ли способ, которым я могу получить IP немедленно в моем методе?

1 Ответ

1 голос
/ 30 марта 2020

ваша конструкция - очень грязный хак, не делайте этого и старайтесь избегать операций с побочными эффектами в реактивных потоках.
Итак, вам просто нужно связать своих операторов следующим образом:

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