Java 项目反应器:设计反应性API

Java 项目反应器:设计反应性API,java,reactive-programming,project-reactor,reactive-streams,Java,Reactive Programming,Project Reactor,Reactive Streams,我有一个map函数,它的定义如下:monomap(IN-IN) 下面是一个具体的例子: public Mono<Integer> map(String s) { return Mono.fromCallable(() -> { try { Thread.sleep(1_000); // simulate HTTP request return

我有一个map函数,它的定义如下:
monomap(IN-IN)

下面是一个具体的例子:

public Mono<Integer> map(String s) {
            return Mono.fromCallable(() -> {
                try {
                    Thread.sleep(1_000); // simulate HTTP request
                    return 1;
                } catch (Exception e) {}

                return -1; // need to return something.
            });
        }
产出将是:

123
456

如何实现同样的行为

map
应该是什么样子

编辑:

重新考虑一下,也许我最好返回一些容器(比如
可选的
)或者一个自定义的(
结果
)可以是空的

如果我理解正确,以下是您需要的:

return Mono.fromCallable(() -> {  
    Thread.sleep(1_000); // simulate HTTP request
    return 1;
}).onErrorResume(_ -> Mono.empty())

为什么不在catch块中返回Mono.empty()。@uneq95,注意try catch在
Mono.fromCallable
中,但是您没有从catch块返回任何内容。代码段中的return语句在catch块之外。是的,它可能在catch内部(其实并不重要)。问题是,您必须从可调用对象返回一些内容,而我希望将
Mono::empty
返回给
map
的调用者,以防没有答案。@yaseco您也可以在可调用lambda内返回null(例如:如果没有答案),这将导致空Mono:
return Mono.fromCallable(() -> {  
    Thread.sleep(1_000); // simulate HTTP request
    return 1;
}).onErrorResume(_ -> Mono.empty())