Есть несколько проблем с вашим кодом.
В Reactor, ничего не происходит, пока вы не подпишетесь .То есть простое создание Mono ничего не делает .В функции, которую вы передаете doOnNext
, вы создаете Mono, на который никогда не подписывается.Поэтому функция, которую вы передаете flatMap
, никогда не будет вызвана.Попробуйте использовать flatMap
вместо doOnNext
(вам понадобится немного поиграть с типами, чтобы заставить его работать).
Одна из проблем при тестировании связана с разница между «временем сборки» и «временем выполнения».Во всех ваших getMe*
методах вы сразу что-то печатаете, а затем возвращаете Mono.Это на самом деле вводит в заблуждение при отладке, потому что печать будет происходить во время сборки, даже если возвращенный Mono никогда не выполняется.Вы можете выполнять побочные эффекты во время выполнения, вместо этого используя Mono.defer()
или Mono.fromSupplier()
.
Техника использования массива для обхода ограничений Java на переменные и лямбда-выражения является плохой практикой, и хотя она может работать в этомслучай, вы должны выйти из привычки, так как он очень хрупкий.Чтобы понять почему, представьте, что какой-то Mono в вашей цепочке выполняет дорогостоящую операцию в другом потоке.Это означает, что функция, которую вы передаете subscribe
, будет вызываться после того, как Final()
уже вернется.