当布尔Mono为某个值时,使用一种较不冗长的方法

时间:2018-08-04 09:14:52

标签: java spring reactive-programming project-reactor

在很多情况下,布尔变量开始一个反应性序列,并且如果它们是某个值(大多数为false),则应该抛出异常并破坏序列。例如

Mono.just(foo.isValid())
    .flatMap(b -> b ? Mono.empty() : Mono.error(new FooNotValidException(foo.detail1, foo.detail2)))
    .then(bar.doProcess())
    .flatMap(b -> b ? Mono.empty() : Mono.error(new BarProcessingNotSuccessful(bar.detail1, bar.detail2)))
    ....

如果foo无效,则bar不会执行,并且序列会中断,但有详细的例外情况,如果bar处理失败,也是如此。

那是我设法达到的最短的距离,但是有很多重复,所以我想知道这是否可以减少冗长?

1 个答案:

答案 0 :(得分:0)

在Borises评论中,我将上面的代码示例重写为

Mono.fromRunnable(foo::isValidOrThrow) // may throw FooNotValidException    
    .then(Mono.fromRunnable(bar::doProcessOrThrow)) // may throw BarProcesingNotSuccessful 
    ....

这看起来好很多。