我正在使用Spring反應堆3.1.0.M3,並有一個用例,我需要合併來自多個源的單聲道。我發現如果其中一個Monos是空的Mono,zip會失敗而不會出錯。彈簧反應堆: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時,組合子被跳過在響應爲空。當我刪除m3時,它全部按預期工作,並返回「AB」。 有沒有辦法通過檢測空的Mono來處理這個問題? 另外,有沒有辦法讓combinator方法知道對象的類型,而不是必須轉換?
對於少數單聲道有Mono.when(我們實際上正在考慮將它改爲3.1.0中的zip)。它不會改變empy-if-one-source-empty行爲,儘管... –
在這個例子中,我只有3個Mono,但在實際的代碼中我使用了Iterable。所以如果我可以過濾掉空的單聲道或以某種方式處理它,這將是有用的。目前,組合的單聲道解決方案無效,並沒有指出原因。當Mono's由多個來源生產時,不能保證沒有任何將是空的 – athom