RXJava逻辑映射链
我用RXJava编写了以下代码RXJava逻辑映射链,java,rx-java,Java,Rx Java,我用RXJava编写了以下代码 validateProduct(payload) .map.(r -> { if(r.getBoolean("valid")){ return createProduct(productPayload); }else{ return null; // request.end() | end the chain here with some message as invalid product. } })
validateProduct(payload)
.map.(r -> {
if(r.getBoolean("valid")){
return createProduct(productPayload);
}else{
return null; // request.end() | end the chain here with some message as invalid product.
}
})
.map(r -> {
return linkCategories(catPayload);
})
.map(r -> {
return linkTags(tagPayload);
})
.doOnError(e -> log.error(e))
.subscribe(r -> {
JsonObject response = new JsonObject().put("status", true);
request.end(response);
}, e -> {
JsonObject response = new JsonObject().put("status", false);
request.end(response);
});
第一个块有一个条件检查,此代码现在不工作。在RX中处理条件链的最佳方法是什么?看起来您可能遇到了空指针异常。RxJava v2中不接受空值。您的第一张地图可能会导致问题 通常,当您在rxjava中需要条件逻辑并且可能不返回对象时,您有两个选项: 返回一个表示null的对象,并可能将其过滤掉 使用类似flatMap的操作符并添加一个空的可观察对象
看起来您可能遇到了空指针异常。RxJavav2中不接受空值。您的第一张地图可能会导致问题 备选案文1
validateProduct(payload)
.map.(r -> {
if(r.getBoolean("valid")){
return createProduct(productPayload);
}else{
return createEmptyProduct(); // generate non null placeholder object
}
})
.filter(r->{
// check here via method call or instanceOf to filter out empty products
r instanceof ValidProduct
}).map(r -> {
return linkCategories(catPayload);
})
.map(r -> {
return linkTags(tagPayload);
})
.doOnError(e -> log.error(e))
.subscribe(r -> {
JsonObject response = new JsonObject().put("status", true);
request.end(response);
}, e -> {
JsonObject response = new JsonObject().put("status", false);
request.end(response);
});
选择2
validateProduct(payload)
.flatMap(r -> {
if(r.getBoolean("valid")){
return createProduct(productPayload); // Assuming this returns an observable if not use Observable.just(createProduct(productPayload))
}else{
return Observable.empty(); // request.end() | end the chain here with some message as invalid product.
}
})
.map(r -> {
return linkCategories(catPayload);
})
.map(r -> {
return linkTags(tagPayload);
})
.doOnError(e -> log.error(e))
.subscribe(r -> {
JsonObject response = new JsonObject().put("status", true);
request.end(response);
}, e -> {
JsonObject response = new JsonObject().put("status", false);
request.end(response);
});
在第二个选项中,返回return Observable.empty;,将调用linkCategoriescatPayload吗?@minatoramikaze否