2017-10-13 14 views
0

私は以下のコードをRXJavaで書いています。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. 
    } 
}) 
.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の条件付きチェーンを処理する最良の方法は何ですか?

答えて

1

おそらくnullポインタ例外が発生しているようです。 RxJava v2ではnullsは受け入れられません。あなたの最初の地図は問題を引き起こす可能性が高いです。あなたはrxjavaで条件付きロジックを必要とし、オブジェクトを返すことはできませんとき

は、一般的に次の2つのオプションがあります:

  1. 戻る意味オブジェクトをヌル
  2. は、LIKE演算子を使用します(そしておそらくそれをフィルタリング)フラットマップを追加して空のオブザーバブルに追加する

おそらくnullポインタ例外が発生しているようです。 RxJavav2ではnullsは受け入れられません。あなたの最初の地図は問題を引き起こす可能性が高いです。

オプション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); 
}); 

あなたがObservable.empty()を返す `戻ってきている2番目のオプションでオプション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); 
}); 
+0

;'、意志 'linkCategories(catPayload)'と呼ばれます? –

+0

@MinatoNamikazenope –