有人可以帮助我了解Mono.defer(),Mono.create()和Mono.just()之间的区别吗?如何正确使用它?
答案 0 :(得分:5)
Mono.just(value)
是最原始的-一旦有了值,就可以将其包装到Mono中,并且下线的订户将获得它。
Mono.defer(monoSupplier)
可让您提供提供结果Mono
实例的整个表达式。该表达式的求值推迟到有人订阅为止。在此表达式内,您还可以使用诸如Mono.error(throwable)
之类的控制结构来表示错误情况(您无法使用Mono.just
来做到这一点)。
Mono.create(monoSinkConsumer)
是最高级的方法,可让您完全控制发射的值。无需从回调中返回Mono
实例(就像在Mono.defer
中一样),您可以控制MonoSink<T>
,使您可以通过MonoSink.success()
,{{1 }},MonoSink.success(value)
方法。
Reactor文档包含一些可能的MonoSink.error(throwable)
用例的良好示例:link to doc。
一般建议是使用功能最弱的抽象来完成这项工作:Mono.create
。