簡體   English   中英

Mono.then 和 Mono.flatMap/map 之間的區別

[英]Difference between Mono.then and Mono.flatMap/map

假設我想調用 webservice1,如果第一個成功則調用 webservice2。

我可以執行以下操作(只是指示性偽代碼):-

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

或者

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

將 mono.just() 用於單個元素時,兩者有什么區別?

flatMap應該用於非阻塞操作,或者簡而言之,任何返回 Mono、Flux 的操作。

map用於在固定時間內對 object /data 進行轉換。 同步完成的操作。

例如:

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

當您想忽略以前 Mono 中的元素並希望完成 stream 時,應該使用then

這是來自@MuratOzkan 的詳細解釋

復制粘貼 TL DR 答案:

如果您關心之前計算的結果,可以使用 map()、flatMap() 或其他 map 變體。 否則,如果您只想完成之前的 stream,請使用 then()。

在您的示例中,看起來您的服務調用不需要上游的輸入,那么您可以使用它來代替:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM