我刚刚开始使用 Spring Webflux,我想知道以下调用是否是在反应流中加载其他项目的好方法,以及是否有另一个运算符可以简化此调用:
Mono<Foo> fooMono = fooService.loadFoo();
fooMono.flatMap(foo -> barService.loadBarForFoo(foo).flatMap(bar -> Mono.just(foo)))
例如:
fooMono
可能是通过WebClient
加载的东西,并且barService.loadBarFromFoo
会知道如何在给定Bar
的情况下加载Foo
,然后将bar
插入foo
。最后我想让 foo
回来执行更多操作,例如将另一个资源加载到 foo
中。
最后从
foo
创建一个新的 Mono 是个好习惯吗?或者是否还有另一个运算符可以用来简化这个?
嗨,如果您不需要使用
thenReturn
方法的结果,您可以使用loadBarForFoo
。
fooMono.flatMap(foo -> barService.loadBarForFoo(foo).thenReturn(foo));
Mono 还存在
delayUntil
方法:
Mono<Foo> fooMono = fooService.loadFoo();
fooMono.delayUntil(foo -> barService.loadBarForFoo(foo))
或者,使用方法参考:
Mono<Foo> fooMono = fooService.loadFoo();
fooMono.delayUntil(barService::loadBarForFoo)
方法参考:Mono.delayUntil