一起使用 Mono 和Optional

Ron*_*6er 4 java reactive-programming spring-webflux

我试图理解反应式程序的一件事是适当地处理没有结果的情况。

假设我有一个 API,可以选择检索用户的最新订单。我想将没有找到用户的行为留给调用者。在普通的旧java中,我会写这样的东西:

Optional<Order> getLatestOrder(int userId) { ... }

在 webflux 中,我试图弄清楚是否应该返回等效函数Mono<Optional<Order>>Mono<Order>

如果我添加getLatestOrder()到反应流中,如果我发出空单声道,它可能会停止。做类似的事情也感觉很奇怪:

getLatestOrder().defaultIfEmpty(new Order());

因为现在感觉就像一个哨兵值,代表它不存在。

Mono是否有关于使用and的模式的指导OptionalOptional当你真的想表达一些不存在的东西时,有没有正确的方法可以完全放弃?

loc*_*ost 5

我开始在一个小项目中使用 webflux,我们遇到了同样的问题。我们决定返回Mono<Order> 大部分时间,然后我们用它switchIfEmpty(Mono<? extends T> alternate)来抛出错误或用替代方法恢复

在我们的用例中switchIfEmpty()defaultIfEmpty()给我们足够的控制权来处理空结果。

参考指南中的示例:https://projectreactor.io/docs/core/release/reference/index.html#_checking_the_execution_path_with_code_publisherprobe_code