假设我想调用一个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())