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