Есть ли разница между doOnSuccess и doOnNext для Mono? - PullRequest
2 голосов
/ 03 мая 2019

Допустим, у вас есть Mono<Integer> someIntegerSource = Mono.just(5) и вы хотите присвоить его переменной.

Есть ли разница между этими фрагментами кода?

Случай 1: doOnSuccess

someIntegerSource.doOnSuccess(number -> this.myNumber = number)

Case2: doOnNext

someIntegerSource.doOnNext(number -> this.myNumber = number)

Случай 3: doOnSuccess + затем (потому что я хочу, чтобы назначение было завершено до выдачи завершения моно)

someIntegerSource.doOnSuccess(number -> this.myNumber = number).then()

1 Ответ

4 голосов
/ 04 мая 2019

Прочитайте документацию класса Mono и посмотрите схемы. Их объяснение поведения довольно ясно. Едва заметных отличий, но все же они:

  • Mono::doOnNext срабатывает, когда данные успешно отправляются .
  • Mono::doOnSuccess срабатывает, когда Mono успешно завершает - результатом является T или null.
  • Mono::then как конец цепочки методов возвращает Mono<Void> для сигналов завершения и ошибок.
    • Обратите внимание, что полезная нагрузка здесь активно отбрасывается, поэтому с Mono<T> становится Mono<Void>. Обратите внимание, что два метода выше не отбрасывают полезную нагрузку.
...