我们有一个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
)?还是有更好的方法来组织代码?
谢谢
答案 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可见。