Mono:flatMap 加载另一个项目然后返回原始项目

问题描述 投票:0回答:2

我刚刚开始使用 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 是个好习惯吗?或者是否还有另一个运算符可以用来简化这个?

spring spring-webflux
2个回答
1
投票

嗨,如果您不需要使用

thenReturn
方法的结果,您可以使用
loadBarForFoo

fooMono.flatMap(foo -> barService.loadBarForFoo(foo).thenReturn(foo));

0
投票

Mono 还存在

delayUntil
方法:

Mono<Foo> fooMono = fooService.loadFoo();
fooMono.delayUntil(foo -> barService.loadBarForFoo(foo))

或者,使用方法参考:

Mono<Foo> fooMono = fooService.loadFoo();
fooMono.delayUntil(barService::loadBarForFoo)

方法参考:Mono.delayUntil

© www.soinside.com 2019 - 2024. All rights reserved.