【问题标题】:Java RX's Flux.merge and switchIfEmptyJava RX 的 Flux.merge 和 switchIfEmpty
【发布时间】:2021-08-30 10:52:57
【问题描述】:

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

我的问题是...如果调用 wOneRepository... 返回一个空列表或调用 wTwoRepository... 返回一个空列表,是否会执行 switchIfEmpty 代码?还是只有在两个调用都返回一个空列表时才会执行?

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")));

谢谢

【问题讨论】:

    标签: project-reactor flux


    【解决方案1】:

    switchIfEmpty() 只会在上游 Flux 完成而没有发出任何东西的情况下被调用,并且只有当 f1f2 都完成而不发出任何东西时才会发生这种情况。因此,如果两个findWidget 调用都失败,或者都返回空的Flux 实例,或者它们的某种组合,那么switchIfEmpty 将被调用。如果f1f2 发出Widget,则Widget 将从merge 运算符发出,这意味着不会调用switchIfEmpty

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2021-09-27
      相关资源
      最近更新 更多