konwersja z Multi na Listę?

0

Cześć wszystkim,
mam następujący kawałek kodu w Quarkusie korzystający z Mutiny:

@GET
public List<Person> getPersons() {
  List<String> personIds = List.of("1", "2", "3");
  List<Person> resultPersons = new ArrayList<>();

  Multi.createFrom()
      .items(personIds.get(0), personIds.get(1), personIds.get(2))
      .onItem()
      .transformToUniAndMerge(id -> personService.getById(id))
      .subscribe().with(item -> {
          System.out.println(item);
          resultPersons.add(item);
      });

  System.out.println("before return");
  return resultPersons;
}

I teraz idea jest taka: mamy endpoint, który NIE jest reaktywny, robimy w nim pewne operacje asynchronicznie (call do zewnętrznego serwisu) i pobieramy dane. Cały szkopuł w tym, że chciałbym, żeby główny wątek "zaczekał" na wynik tych operacji, tak, żeby potem to przetransformować normalnie w List<Person> i to zwrócić. Obecnie sytuacja jest taka, że główny wątek leci dalej, zwracając pustą listę, a odpowierdzi z calli napływają dopiero później:

before return
org.model.Person@751ae27b
org.model.Person@67c5df42
org.model.Person@5cf29b38

Czy ma ktoś pojęcie, jak tego dokonać?

0

A asStream() nie ogarnie tematu?

0

Już znalazłem odpowiedź, więc zostawię dla potomnych którzy podobnie jak ja będą zaczynać przygodę z programowaniem reaktywnym:

@GET
    public List<Person> getPersons() {
        List<String> personIds = List.of("1", "2", "3");
        
        Uni<List<Person>> uni = Multi.createFrom()
                .items(personIds.get(0), personIds.get(1), personIds.get(2))
                .onItem()
                .transformToUniAndMerge(id -> personService.getById(id))
                .collect()
                .asList();

        List<Person> resultPersons = uni.await().indefinitely();

        System.out.println("before return");
        return resultPersons;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1