2017-10-10 15 views
1

私は、バックエンドからデータを取得する必要がある状況を抱えています。 私は何を実装しすると、バックエンドは、有効なデータを送信しませんが条件付き出口を持つ角型http - Chain Observables

場合
this.http.get('myurl') 
      .map(data => doFirstProcessingStep(data)) 
      .map(data1 => doSecondProcessingStep(data)) 
      .map(data2 => doThirdProcessingStep(data)) 

のようなもので、私はすべてのステップを実行するだけで、どのObservable.of(null)

を返さずに処理チェーンを終了しますそのようなロジックを実装するエレガントな方法ですか?

+0

サービスがエラーを返す場合は、キャッチする必要があります。それ以外の場合は、フィルタを使用することを検討してください。 – methgaard

+0

エラーは必要ありません。バックエンドは、空のデータセットを返すことができます。フィルタを適用する方法の詳細を教えてください。 – Picci

答えて

1

新しいHttpClientを使用している場合は、あなたの応答を自動的にJSONに変換されます。また、バックエンドで空の応答が返された場合、カーテンの背後で起きているJSON.parseがエラーになります。

Observableチェーン内で、エラーがスローされると、catchが見つかるまで、他のすべての演算子をチェーンの下にスキップします。したがって、このように期待通りに動作するはずです。

this 
    .http 
    .get('myurl') 
    .map(data => doFirstProcessingStep(data)) 
    .map(data1 => doSecondProcessingStep(data)) 
    .map(data2 => doThirdProcessingStep(data)) 
    .catch(err => Observable.of(null)) 
0

あなたは以下のようにそれを行うことができます。

this.http.get('myurl') 
    .map(data => this.doAllProcessing(data)); 

doAllProcessing(data) { 
    if (!dataIsValid(data)) { 
     return null; 
    } 
    data = doFirstProcessingStep(data); 
    data = doSecondProcessingStep(data); 
    data = doThirdProcessingStep(data); 

    return data; 
} 
関連する問題