2017-11-29 11 views
10

私はちょっと混乱しています。pipeオペレータvsちょうどチェーンmapです。以下の両方の例は機能的に同等ですか?パイプ機能の目的または利点は何ですか?Angular rxjsの場合、 `pipe`と` map`を使うべきです

const name = ajax 
    .getJSON<{ name: string }>("/api/employees/alice") 
    .pipe(
    retry(3, 1000), 
    map(employee => employee.name), 
    catchError(error => of(null)) 
); 

const name = ajax 
    .getJSON<{ name: string }>("/api/employees/alice") 
    .let(retry(3, 1000)) 
    .map(employee => employee.name) 
    .catch(error => Rx.Observable.of(null)); 

答えて

18

"新しい" 方法は、pipeを使用して、Pipeable Operators賃貸可能演算子と呼ばれています。チェーン演算子を使用する「古い」方法は、「パッチ演算子」を使用して呼び出されます。

バージョン5.5から、rxjs/operators(複数の「演算子」に注意してください)にアクセスできる「配管可能演算子」が出荷されました。これらは、rxjs/add/operator/*にある「パッチ」演算子よりも、必要な演算子だけを引き出すためのより良いアプローチです。

problems with the patch operatorsがありました。また、コードから生成されたバンドルを小さくすることもできます。他の利点もあります。documentationを参照してください。

2つのコードサンプルは機能的に同等ですが、他の質問にお答えしてください。また、可能であれば、Pipeable Operators over Patchable Operatorsを使用する必要があります。ドット・チェーンのためのパッチを当て事業者と

documentationから

(完全用

問題点は次のとおりです。

  1. パッチ演算子をインポートし、任意のライブラリーは、Observable.prototypeを強化しますそのライブラリのすべてのコンシューマに対して、ブラインド依存関係を作成します。ライブラリがその使用を取り除くと、彼らは無意識に他の人を壊します。パイプラブルでは、必要な演算子を使用する各ファイルにインポートする必要があります。
  2. プロトタイプに直接パッチを当てた演算子は、ロールアップやWebpackなどのツールではツリーシェイクできません。配管可能な演算子はモジュールから直接引っ張られた関数なのです。
  3. アプリケーションにインポートされている未使用の演算子は、ビルドツールやリントルールによって確実に検出することはできません。つまり、scanをインポートすることはできますが、使用を中止しても、まだ出力バンドルに追加されています。配管可能な演算子を使用している場合は、リントルールでそれを選択することができます。
  4. 機能的な構成は素晴らしいです。独自のカスタム演算子を構築することはずっと簡単になり、rxjsの他のすべての演算子と同様に動作します。 Observableを拡張するか、liftを上書きする必要はありません。
+0

これは[pipeable演算子(https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md)と呼ばれています。 – estus

+0

@estus - 確かに、彼らは1月12日に用語を変更しました。 – Igor

関連する問題