gpt4 book ai didi

java - 链中发生错误时更新原始Mono

转载 作者:行者123 更新时间:2023-12-02 01:15:01 25 4
gpt4 key购买 nike

假设我有这样的东西:

Mono.just(a)
.flatMap(...) // init
// set fields on a if error occurs
.flatMap(...) // finalize
.subscribe();

在最后一个 flatMap 中,我根据 a 中字段的值执行一些最终逻辑。特别是我需要知道初始化期间是否发生错误...

所以我需要一种方法来拦截错误并允许操作原始对象。

如果我没记错的话,所有 onError* 方法都会返回原始对象,但不允许更新它。

另外doOnError似乎并不能解决我的问题。

有办法实现我的需求吗?

最佳答案

请记住,这是一系列离散且(可能)异步的步骤。输入步骤后,您获得的唯一上下文就是上一步的输出,以 onNextonCompleteonError 信号的形式,加上任何可以向您公开的 java 核心语言功能。例如,如果您要在 flatmap lambda 中组装内部 Flux,java 可以让您访问该 lambda 的输入参数。

后者可能是您需要的解决方案:您可以在其中获取原始值的范围。

因此,第一个 flatMap 可以充当封闭范围并处理名义情况和错误情况。像这样的东西:

Mono<B> processed = Mono.just(a)
.flatMap(a -> init(a)
.onErrorResume(fallback(a))
)
.flatMap(...); // finalize
processed.subscribe();

//for illustration purposes, what process and fallback may typically look like:
Mono<B> init(A a) {
return Mono.zip(
asyncServiceStuff.process(a.stuff),
asyncServiceOtherStuff.process(a.otherStuff),
(bPart1, bPart2) -> new B(bPart1, bPart2)
);
}

Mono<B> fallback(A original) {
return Mono.just(new FallbackB(a.otherStuff));
}

也就是说,您似乎想要从 a 创建后备,它已经可以在方法的范围内访问(理想情况下作为 final 输入参数或变量)。

关于java - 链中发生错误时更新原始Mono,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com