RxJava-在第二flatMapSingle

时间:2019-06-06 14:19:30

标签: rx-java2 vert.x vertx-verticle

我们有一个vertx verticle,它接收一个id并使用它来查看数据库中是否存在具有id的实体。它包含以下逻辑:

if (itemFound) {
  e.onNext(item_which_was_found)
}
else {
  e.onNext(null);
}

另一个顶点具有一个Observable,该Observable处理ID的列表。它使用rxSend将列表中的每个id传递到第一个verticle以进行数据库查找:

Observable<Object> observable = ...
observable.flatMapSingle(id -> {
  return rxSend(VERTICLE_1_ADDRESS, id);
})
.flatMapSingle ( i ->
{ 
  // Logic dependent on if item was found
)
.subscribe();

使用上述方法,可以轻松处理在数据库中找到与id关联的实体的情况,因为onNext()中的第一个顶点返回了该实体。问题是第二种情况,当不存在实体并且第一个顶点返回onNext(null)时。在这种情况下,如何在第二个flatMapSingle中检索可观察对象中当前正在处理的项目(即,没有关联数据库实体的id)?还是有更好的方法来组织代码?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以将可观察的定义更改为:

Observable<Object> observable = observable();
observable.flatMapSingle(id -> {
  return rxSend(VERTICLE_1_ADDRESS, id).flatMap(i -> {
    // Logic dependent on if item was found
    // id is visible here
  });
}).subscribe();

然后id将对您的第二个lambda可见。