Java RX 的 Flux.merge 和 switchIfEmpty

Java RX's Flux.merge and switchIfEmpty

我试图了解 JavaRx 的 Flux.merge 和 switchIfEmpty 如何在下面的代码中一起工作,因为我对我看到的结果有点困惑,这无疑是我没有完全掌握 Java RX.

我的问题是...如果调用 wOneRepository...returns 是一个空列表或调用 wTwoRepository...returns 是一个空列表,switchIfEmpty 代码被处死?或者只有当两个调用 return 一个空列表时它才会被执行?

Flux<Widget> f1 = wOneRepository.findWidgets(email).onErrorResume(error -> Flux.empty());
Flux<Widget> f2 = wTwoRepository.findWidgets(email).onErrorResume(error -> Flux.empty());
return Flux.merge(f1, f2)
                    .switchIfEmpty(Flux.error(new IllegalArgumentException("Widgets were not found")));

谢谢

switchIfEmpty() 仅当上游 Flux 完成且未发出任何内容时才会被调用,并且仅当 f1f2 均完成且未发出任何内容时才会发生这种情况。因此,如果两个 findWidget 调用都失败,或者两个 return 空 Flux 实例,或者它们的某种组合,那么 switchIfEmpty 将被调用。如果 f1f2 发出 Widget,则 Widget 将从 merge 运算符发出,这意味着 switchIfEmpty 不会打电话。