Mono.then和Mono.flatMap/map之间的差异



假设我想调用一个webservice1,如果第一个成功,则调用webservice2。

我可以做以下(只是指示性的psuedo代码(:-

Mono.just(reqObj)
.flatMap(r -> callServiceA())
.then(() -> callServiceB())

Mono.just(reqObj)
.flatMap(r -> callServiceA())
.flatMap(f -> callServiceB())

当对单个元素使用mono.just((时,两者之间有什么区别?

flatMap应该用于非阻塞操作,或者简而言之,任何返回Mono、Flux的操作。

当您希望在固定时间内对对象/数据进行转换时,应使用map。同步完成的操作。

例如:

return Mono.just(Person("name", "age:12"))
.map { person ->
EnhancedPerson(person, "id-set", "savedInDb")
}.flatMap { person ->
reactiveMongoDb.save(person)
}

当您想忽略前一个Mono中的元素并希望流完成时,应该使用then

以下是@MuratOzkan 的详细解释

复制粘贴TL DR答案:

如果您关心上一次计算的结果,可以使用map((、flatMap((或其他map变体。否则,如果您只想完成上一个流,请使用then((。

在您的示例中,看起来您的服务调用不需要上游的输入,那么您可以使用以下内容:

Mono.just(reqObj)
.then(() -> callServiceA())
.then(() -> callServiceB())

最新更新