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

Mutiny多Uni结果合并时如何忽略失败仅保留成功结果?

解决方案

要实现忽略失败的Uni调用、收集所有成功结果并记录失败日志,核心思路是给每个独立的Uni添加失败处理逻辑:捕获异常后记录日志,再返回一个空列表作为"兜底"结果,这样整个合并操作就不会因为单个Uni失败而终止。

修改后的完整代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jboss.logging.Logger;

// 声明日志实例,替换为你的类名
private static final Logger LOG = Logger.getLogger(YourClassName.class);

List<Uni<List<Result>>> unis = new ArrayList<>();
for (Source source : sources) {
    Uni<List<Result>> safeUni = source.getResults()
            // 捕获失败并记录日志
            .onFailure().invoke(throwable -> {
                LOG.error("从数据源获取数据失败", throwable);
            })
            // 失败时返回空列表,避免整个合并流程中断
            .recoverWithItem(Collections.emptyList());
    unis.add(safeUni);
}

return Uni.combine().all().unis(unis).combinedWith(
        responses -> {
            List<Result> res = new ArrayList<>();
            for (List<Result> response : responses) {
                res.addAll(response);
            }
            return res;
        }
);

关键细节解释

  • onFailure().invoke(...):在Uni失败时执行日志记录的副作用操作,不会改变Uni本身的执行状态。
  • recoverWithItem(Collections.emptyList()):将失败的Uni结果替换为空列表,确保合并操作能继续处理其他成功的Uni,不会导致整个合并结果失败。
  • 原有的合并逻辑无需修改,失败的Uni已被转换为返回空列表,不会对最终的结果集合产生干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:55:14