Разница между Mono.then и Mono.flatMap / map
Скажем, я хочу вызвать webservice1, а затем вызвать webservice2, если первый был успешным.
Я могу сделать следующее (только ориентировочный псевдокод):-
Mono.just(reqObj)
.flatMap(r -> callServiceA())
.then(() -> callServiceB())
или
Mono.just(reqObj)
.flatMap(r -> callServiceA())
.flatMap(f -> callServiceB())
В чем разница между ними при использовании mono.just() для одного элемента?
2 ответа
flatMap
следует использовать для неблокирующих операций или, короче, для всего, что возвращает обратно Mono, Flux.
map
следует использовать, когда вы хотите выполнить преобразование объекта / данных в фиксированное время. Операции, выполняемые синхронно.
Например:
return Mono.just(Person("name", "age:12"))
.map { person ->
EnhancedPerson(person, "id-set", "savedInDb")
}.flatMap { person ->
reactiveMongoDb.save(person)
}
then
следует использовать, если вы хотите игнорировать элемент из предыдущего Mono и хотите, чтобы поток был завершен
Вот подробное объяснение от @MuratOzkan
Скопируйте вставку ответа TL DR:
Если вам важен результат предыдущего вычисления, вы можете использовать map(), flatMap() или другой вариант карты. В противном случае, если вы просто хотите, чтобы предыдущий поток закончился, используйте then().
В вашем примере похоже, что ваши служебные вызовы не требуют ввода восходящего потока, тогда вы можете использовать это вместо этого:
Mono.just(reqObj)
.then(() -> callServiceA())
.then(() -> callServiceB())