Как проверить, действительно ли был вызван Mono?JAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Как проверить, действительно ли был вызван Mono?

Сообщение Гость »


Я новичок в реактивном программировании (и я прочитал кучу подобных вопросов по SO). В моем текущем любимом проекте я столкнулся со следующей проблемой (я предоставляю псевдокод для рассматриваемого сценария).

Речь идет о фильтрации Mono и последующем определении того, был ли вызван Mono. В примере ниже:
[*]Я создаю Mono из входных данных [*]фильтр, если входной Строковый ресурс подходит для моего метода. [*]плоское сопоставление моего Mono с давно работающим Mono. Он меняет некоторые внутренние свойства системы, но ничего не возвращает. [*]если service.loadSmth был выполнен и завершен успешно, я хочу вызвать serviceContinueWork.doSmthElse()
public Mono выполнить (String resources) { вернуть Mono.just(ресурс) //Mono .filter(Objects::nonNull) //Mono .filter(msg -> msg.startsWith("http://")) //фильтрация Mono .flatMap(msg -> service.loadSmth(msg)) //плоская карта в Mono .doOnSuccess(команда -> serviceContinueWork.doSmthElse()) //!!! выполняется всегда :( .doOnError(t -> log.error("ошибка service#loadSmth: {}", ExceptionUtils.getStackTrace(t))) .затем(); } Однако doOnSuccess вызывается независимо от того, была ли строка отфильтрована или нет. Пустой Mono считается успешно завершенным, насколько я понимаю.

Какова закономерность такой ситуации? (Когда мы хотим определить, был ли вызван Mono, doOnNext и doOnSuccess не подходят.)

Насколько я понимаю, я всегда могу переключиться на service.loadSmth(msg), возвращая Mono, а затем doOnNext вместо doOnSuccess будет работать нормально.

Однако, похоже, должен быть какой-то способ различать эти случаи без ненужного изменения подписи. Мне нужно знать, был ли метод вызван «извне» - во внешнем вызывающем коде. Например, я бы не стал заставлять метод void doSmth() возвращать логическое значение, просто чтобы знать, был ли он вызван (в обычных, нереактивных/нефункциональных случаях).

Будем благодарны за любые советы/ссылки.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»