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ć?