Dans RxJS angulaire Quand dois-je utiliser 'pipe' vs ' map`

je suis un peu confus par l' pipe opérateur vs juste chaînage map. Sont les deux exemples ci-dessous fonctionnellement équivalent? Quel est le but ou l'avantage de la conduite de la fonction?

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));
34
demandé sur Igor 2017-11-29 14:58:57

1 réponses

la" nouvelle " façon, en utilisant pipe, s'appelle Opérateurs Lettables Opérateurs Pipables. La" vieille " façon, où vous enchaînez les opérateurs, est appelée en utilisant des "opérateurs de patch".

à partir de la version 5.5, Nous avons envoyé des "opérateurs pipeables", accessibles en rxjs/operators (notez les "opérateurs"pluralisés). Il s'agit d'une meilleure façon de tirer sur les opérateurs dont vous avez besoin que sur les opérateurs "patch" que l'on trouve dans rxjs/add/operator/*.

Il y avait quelques problèmes avec le patch opérateurs. Ils peuvent également s'assurer que votre paquet produit à partir de votre code est plus petit. Il y a d'autres avantages aussi bien, voir documentation qui couvre assez bien.

pour répondre à votre autre question bien que vos 2 échantillons de code soient fonctionnellement équivalents. Vous devriez également utiliser des opérateurs Pipables sur les opérateurs de Patch chaque fois que possible.


documentation (pour l'exhaustivité)

Problèmes avec le corrigé des opérateurs pour dot chaîne sont les suivants:

  1. toute bibliothèque qui importe un opérateur de patch augmentera le Observable.prototype pour tous les utilisateurs de cette bibliothèque, créant des dépendances aveugles. Si la bibliothèque supprime leur usage, ils brisent sans le savoir tout le monde. Avec pipables, vous devez importer les opérateurs vous devez dans chaque fichier que vous utilisez.
  2. les opérateurs raccordés directement au prototype ne sont pas "tree-shakeable" par des outils comme rollup ou webpack. Les opérateurs Pipeable seront comme ils sont juste des fonctions tirées dans les modules directement.
  3. les opérateurs non utilisés qui sont importés dans les applications ne peuvent pas être détectés de manière fiable par n'importe quelle sorte d'outil de construction ou de règle de peluche. Cela signifie que vous pouvez importer scan, mais cessez de l'utiliser, et il est encore ajouté à votre sortie bundle. Avec les opérateurs pipables, si vous ne l'utilisez pas, une règle de peluche peut le ramasser pour vous.
  4. la composition fonctionnelle est géniale. Construire vos propres opérateurs personnalisés devient beaucoup, beaucoup plus facile, et maintenant ils fonctionnent et ressemblent à tous les autres opérateurs de rxjs. Vous n'avez pas besoin de s'étendre Observables ou remplacer