从 Mono.fromCallable 返回 Mono.empty()

use*_*406 4 project-reactor spring-webflux

我想做如下的事情。在 Mono.fromCallable 中,我运行一些块逻辑,然后根据值返回 Mono.empty() 或该值,以便它将触发映射或 defaultIfEmpty。

            Mono.fromCallable(() -> {
                double number = Math.random();
                if (number < 0.5) {
                    return Mono.empty();
                }

                return number;
            })
            .map(number -> 1)
            .defaultIfEmpty(0)
Run Code Online (Sandbox Code Playgroud)

这会产生错误,因为 Mono.fromCallable 期望一致的返回值。如何调整代码以使其正常工作?

bsi*_*eup 8

尽管null在 Reactor API 中通常禁止返回,但它是可能返回的有效值Callable,Reactor 通过转换为空来正确处理它Mono

Mono.fromCallable(() -> {
    double number = Math.random();
    if (number < 0.5) {
        return null;
    }

    return number;
})
Run Code Online (Sandbox Code Playgroud)