Reactor-如何使用filterWhen,并且如果未通过过滤器,该值是否仍用于记录目的?

问题描述 投票:0回答:1

我正在尝试找出执行以下操作的正确方法。

  • 我想通过name检查数据库中是否存在记录,这是全局二级索引。 (假设主键为id。)>
  • [如果已经有一个具有name的项目,则记录idname并返回错误。
  • 如果没有带有给定name的项目,则继续。
  • 现在,代码结构看起来像这样。

private fun checkExistingData(name: String): Mono<QueryResponse> {
  return repo.getDataByName(name)
    .filterWhen { Mono.just(!it.hasItems()) }
    .switchIfEmpty {
      // log the existing id and name from QueryResponse
      Mono.error(SomeCustomException))
    }
    .flatMap {
      // proceed
    }
}

如您所见,如果我想在id子句中记录switchIfEmpty,则需要在其中执行repo.getDataByName(name),以便能够检索该项目并获得该项目的id。显然,这是低效的,因为在switchIfEmpty之前我已经这样做了。

什么是正确的方法?

我正在尝试找出执行以下操作的正确方法。我想按名称检查记录是否存在于数据库中,这是一个全局二级索引。 (假设主键是id)。如果有...

kotlin project-reactor reactor
1个回答
0
投票

这可能不是最正确的答案,因为我对反应堆不了解很多,特别是那个单声道在做什么。

© www.soinside.com 2019 - 2024. All rights reserved.