gpt4 book ai didi

java - 如何有条件地执行Reactor的Mono/Flux供应商操作符?

转载 作者:行者123 更新时间:2023-11-30 05:30:16 27 4
gpt4 key购买 nike

如何有条件地执行 then(Mono<T>) 运算符?

我有一个返回 Mono<Void> 的方法。它还可以返回错误信号。我想使用then运算符(或任何其他运算符),仅当前一个操作完成且没有错误信号时。

有人可以帮我找到合适的供应商运营商吗?

    public static void main(String[] args) {
Mono.just("GOOD_SIGNAL")//It can also be a BAD_SIGNAL
.flatMap(s -> firstMethod(s))
.then(secondMethod())
.subscribe()
;
}
    private static Mono<String> secondMethod() {
//This method call is only valid when the firstMethod is success
return Mono.just("SOME_SIGNAL");
}
    private static Mono<Void> firstMethod(String s) {
if ("BAD_SIGNAL".equals(s)) {
Mono.error(new Exception("Some Error occurred"));
}

return Mono
.empty()//Just to illustrate that this function return Mono<Void>
.then();
}

-谢谢

最佳答案

首先,我想强调Reactor的Mono/Flux(接下来会考虑Mono)具有以下条件运算符(至少是我所知道的):

第二点是Mono#then :

ignore element from this Mono and transform its completion signal into the emission and completion signal of a provided Mono. An error signal is replayed in the resulting Mono.

因此,这意味着 then 将返回该值(空或已提供),无论其之前是什么。

考虑到所有这些,您的解决方案将类似于:

public static void main(String[] args) {
Mono.just("GOOD_SIGNAL")//It can also be a BAD_SIGNAL
.flatMap(s -> firstMethod(s))
.switchIfEmpty(secondMethod())
.doOnError(...)//handle you error here
.subscribe();
}

private static Mono<String> secondMethod() {
//This method call is only valid when the firstMethod is success
return Mono.just("SOME_SIGNAL");
}

private static Mono<Void> firstMethod(String str) {
return Mono.just(str)
.filter(s -> "BAD_SIGNAL".equals(s))
.map(s -> new Exception("Some Error occurred: "+s))
.flatMap(Mono::error);
}

关于java - 如何有条件地执行Reactor的Mono/Flux供应商操作符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57701200/

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