You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Project Reactor流中如何包装异常并返回指定结果?

问题分析

原代码中,onErrorResume是作用在整个Flux上的错误恢复操作:当处理元素0抛出ArithmeticException时,原Flux会被直接终止,替换成返回9的新Flux,导致原Flux中后续的元素4完全没有被处理,最终输出缺少了对应4的结果。

解决方案

要实现单个元素出错时返回默认值、同时继续处理流中其他元素的需求,需要将每个元素的异常处理隔离在独立的上下文里。可以用flatMap将每个元素包装为Mono,并在单个Mono上使用onErrorResume处理异常,这样单个元素的错误不会影响整个流的执行。

修正后的代码:

Flux<Integer> flux = Flux.just(1, 0, 4).cache();
flux.flatMap(i -> 
        // 将每个元素包装为Mono,单独处理异常
        Mono.just(i)
            .map(num -> 2 / num)
            .onErrorResume(e -> Mono.just(9)) // 捕获异常时返回默认值9
    )
    .map(i -> i * 2)
    .map(i -> i + "here1")
    .subscribe(System.out::println);
输出结果

运行上述代码后,将得到你期望的输出:

4here1
18here1
0here1

内容的提问来源于stack exchange,提问作者wwulfric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:55:18