弹簧反应器 - 等到单声道完成然后做下一个单声道

时间:2018-03-12 10:43:27

标签: project-reactor spring-webflux

假设我有一个返回Mono的repository.save(..)方法。

还可以说我有一个repository.findByEmail(..),它返回一个Mono。

问题:

我希望第一个Mono完成第二个Mono之后完成。

repository.save(..).then(repository.findByEmail(..))

然而,第二个Mono总是首先被执行? 我的印象是.then(..) finishes and then plays another Mono

源代码说:
Let this {@link Mono} complete then play another Mono.

我的问题的解决方案是什么?

1 个答案:

答案 0 :(得分:4)

是什么让您认为此运算符的行为不符合预期?

以下示例显示了它:

Mono.just("first").log()
                .then(Mono.just("second")).log()
                .subscribe();

日志:

[main] INFO  reactor.Mono.IgnoreThen.2 - | onSubscribe([Fuseable] MonoIgnoreThen.ThenIgnoreMain)
[main] INFO  reactor.Mono.IgnoreThen.2 - | request(unbounded)
[main] INFO  reactor.Mono.Just.1 - | onSubscribe([Synchronous Fuseable] Operators.ScalarSubscription)
[main] INFO  reactor.Mono.Just.1 - | request(unbounded)
[main] INFO  reactor.Mono.Just.1 - | onNext(first)
[main] INFO  reactor.Mono.Just.1 - | onComplete()
[main] INFO  reactor.Mono.IgnoreThen.2 - | onNext(second)
[main] INFO  reactor.Mono.IgnoreThen.2 - | onComplete()

请添加log运营商并在您的问题中分享日志。