猿问

Project Reactor:设计反应式 API

我有一个地图函数,其定义如下:Mono<OUT> map(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.

            });

        }

问题是如果出现错误(即IOException),我们仍然需要返回一些输出。也有可能没有答案(但没有发生错误)


一种解决方案可能是,Optional::empty但我认为这很麻烦。Mono::empty如果发生错误,我最好返回。


原因是,Mono::empty在没有任何进一步处理的情况下被订阅者消费。这是一个例子:


Flux.just(

                Mono.just("123"),

                Mono.empty(),

                Mono.just("456")

        ).flatMap(s -> s)

                .subscribe(System.out::println);

输出将是:


123

456


如何实现相同的行为?


应该是什么map样子?


编辑:

重新考虑一下,也许我最好返回一些容器(如Optional)或一个Result可以为空的自定义容器( )。


千万里不及你
浏览 87回答 1
1回答

红糖糍粑

如果我理解正确,这就是你需要的:return&nbsp;Mono.fromCallable(()&nbsp;->&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1_000);&nbsp;//&nbsp;simulate&nbsp;HTTP&nbsp;request &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1; }).onErrorResume(_&nbsp;->&nbsp;Mono.empty())
随时随地看视频慕课网APP

相关分类

Java
我要回答