57 votes

Dans Angular rxjs, quand dois-je utiliser `pipe` vs` map`

Je suis un peu dérouté par l'opérateur pipe rapport à l'enchaînement de map . Les deux exemples ci-dessous sont-ils fonctionnellement équivalents? Quel est le but ou l'avantage de la fonction pipe?

 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));
 

59voto

Igor Points 7994

La "nouvelle voie", à l'aide de pipe, est appelé Locative Opérateurs Pipeable Opérateurs. Le "vieux", où vous opérateurs de la chaîne, est appelé à l'aide "patch opérateurs".

À partir de la version 5.5, nous avons expédié "pipeable opérateurs", qui peut être consulté en rxjs/operators (notez le pluriel des "opérateurs"). Ceux-ci sont destinés à être une meilleure approche pour tirer en seulement les opérateurs vous avez besoin que le "patch" opérateurs en rxjs/add/operator/*.

Il y avait quelques problèmes avec le patch opérateurs. Ils peuvent aussi vous assurer que votre produit bundle à partir de votre code est plus petit. Il y a d'autres avantages, consultez la documentation qui assez bien la recouvre.

Pour répondre à votre autre question si vos 2 exemples de code sont fonctionnellement équivalentes. Aussi, vous devez utiliser Pipeable Opérateurs sur Patch Opérateurs à chaque fois que possible.


À partir de la documentation (intégralité)

Des problèmes avec le corrigé des opérateurs pour dot-chaînage sont:

  1. Toute bibliothèque qui importe un patch opérateur va augmenter le Observable.prototype pour l'ensemble des consommateurs de la bibliothèque, de la création à l'aveugle dépendances. Si la bibliothèque supprime leur utilisation, sans le savoir, ils cassent tout le monde. Avec pipeables, vous devez importer les opérateurs dont vous avez besoin dans chaque fichier vous les utilisez dans des.
  2. Les opérateurs patché directement sur le prototype ne sont pas "arbre-shakeable" par des outils tels que le correctif cumulatif ou webpack. Pipeable les opérateurs de l'être qu'ils sont juste des fonctions tiré à partir de modules directement.
  3. Inutilisés, les opérateurs qui sont importés dans les applications ne peuvent pas être détectés de manière fiable par une sorte de construction de l'outillage ou les peluches, utilisez la règle. Cela signifie que vous pouvez importer scan, mais cessez de l'utiliser, et il est encore ajouté à votre sortie du bundle. Avec pipeable opérateurs, si vous ne l'utilisez pas, un chiffon en règle peut le récupérer pour vous.
  4. Fonctionnelle composition est génial. La construction de votre propre des opérateurs devient beaucoup, beaucoup plus facile, et maintenant ils travaillent et ressemblent à tous les autres opérateurs de rxjs. Vous n'avez pas besoin de s'étendre Observables ou remplacer lift plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X