看起來你可能會遇到一個空指針異常。在RxJava v2中不可接受空值。您的第一張地圖可能會導致問題。
一般來說,當你需要條件邏輯在rxjava不得返回一個對象,你有兩個選擇:
- 回報是表示物體空(也可能是過濾出來)
- 使用的運營商像flatMap並加上一個空的Observable
它看起來像你可能會遇到一個空指針異常。在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);
});
在第二個選項,在這裏你正在返回'返回Observable.empty();','會linkCategories(catPayload)'調用? –
@MinatoNamikaze nope –