1

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

我可以执行以下操作(只是指示性伪代码):-

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

或者

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

将 mono.just() 用于单个元素时,两者有什么区别?

4

2 回答 2

3

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 中的元素并希望完成流时应该使用

于 2020-07-13T04:28:26.923 回答
1

这是来自@MuratOzkan 的详细解释

复制粘贴 TL DR 答案:

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

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

Mono.just(reqObj)
.then(() -> callServiceA())
.then(() -> callServiceB())
于 2020-07-12T20:23:39.980 回答