【发布时间】:2018-01-25 09:53:25
【问题描述】:
我正在使用 Spring Reactor 3.1.0.M3 并且有一个用例,我需要合并来自多个来源的 Mono。我发现如果其中一个 Mono 是空的 Mono,则 zip 会失败而不会出现错误。
例子:
Mono<String> m1 = Mono.just("A");
Mono<String> m2 = Mono.just("B");
Mono<String> m3 = Mono.empty();
Mono<String> combined = Mono.zip(strings -> {
StringBuffer sb = new StringBuffer();
for (Object string : strings) {
sb.append((String) string);
}
return sb.toString();
}, m1, m2, m3);
System.out.println("Combined " + combined.block());
添加 m3 时,在响应为 null 时跳过组合子。当我删除 m3 时,一切都按预期工作,并返回“AB”。 有没有办法通过检测空的 Mono 来处理这个问题? 另外,有没有办法让组合器方法知道对象的类型而不必强制转换?
【问题讨论】:
-
对于少数 Mono 有 Mono.when(我们实际上正在考虑将其更改为 3.1.0 中的 zip)。虽然它不会改变 empy-if-one-source-empty 行为...
-
在这个例子中我只有 3 个 Mono,但在实际代码中我使用了 Iterable。因此,如果我可以过滤掉空的 Mono 或以某种方式处理它,那将会很有用。目前,组合的 Mono 解析为 null ,但没有说明原因是什么。当 Mono 由多个来源生成时,不能保证没有一个是空的
标签: java spring project-reactor