Mono<Student> studentMono = some1();
Mono<School> schoolMono = some2();
Mono<Person> categoryBestPageResponseMono = Mono
.zip(studentMono, schoolMono)
.flatMap(data -> {
Student student = data.getT1();
School school = data.getT2();
Person person = Person.builder()
.student(student)
.school(school)
.build();
return Mono.just(person);
})
.flatMap(person -> {
Mono<PassInfo> passInfoMono = getPassOrfail(person.student.id, person.school.number);
//pass info is null when first and second get from cache not null
passInfoMono.subscribe(passInfo -> person.setPassInfo(passInfo));
return Mono.just(person);
});
В приведенном выше источнике я всегда получаю null
вместо passInfo
.
Как я могу дождаться операции getPassOrfail
и поставить passInfo
в person
в сеттере?
Код не компилируется на Mono.just(student)
.
@NikolasCharalambidis жаль, что это было person
Я бы использовал преимущество цепочки. Кстати. все это можно упростить до простого фрагмента:
Mono<Person> categoryBestPageResponseMono = Mono
.just(Person.builder()
.student(some1())
.school(some2())
.build())
.flatMap(person -> getPassOrfail(person.student.id, person.school.number)
.doOnSuccess(person::setPassInfo)
.thenReturn(person));
flatMap()
нигде, я вижу, вы используете его для полностью синхронных операций, а затем просто делаете Mono.just(...)
в операторе return. Для синхронных операций есть оператор .map()
Mono.zip(studentMono, schoolMono)
.map(data -> {
Student student = data.getT1();
School school = data.getT2();
Person person = Person.builder()
.student(student)
.school(school)
.build();
return person;
})
.flatMap(person -> getPassOrfail(person.getStudent().getId(), person.getSchool().getNumber())
.map(passInfo -> {
person.setPassInfo(passInfo);
return person;
})
);
Don't subscribe anywhere throughout your reactive without any needs
что значит? Как я могу использовать подписку вместо doOnXXX. Я думаю, что это то же самое.
Тег mono не имеет ничего общего с Java. Не злоупотребляйте этим.