Arrêtons d’utiliser le pipe `async`, pourquoi ?

Je suis Ezéchiel Amen AGBLA, Angular Developer Expert & Ionic Developer Expert, passionné par le développement web et mobile. Je mets la lumière sur des notions liées à Angular et à Ionic pour la communauté francophone.
Dans vos applications Angular, vous avez certainement l'habitude d'utiliser le pipe async pour souscrire à un Observable afin de récupérer les données émises. Ce pipe, dans sa particularité permet aussi de détruire cet Observable de façon implicite dès que la souscription est complète.
Prenons cet exemple de code :
<ul>
<li *ngFor="let number of numbers$ | async">
{{ number }}
</li>
</ul>
Que se passera t-il, lorsque la souscription à l'
Observableretournera une erreur ? Rien ! On ne peut pas signaler à l'utilisateur qu'il y a un problème par exemple 😱
On fait face à un souci d'expérience utilisateur😫
Lorsque l'Observable retourne une erreur, rien ne se passe du côté du pipe async. Il n'y a pas un moyen de traiter l'erreur. C'est dérangeant car l'on aimerait quand même afficher un message d'erreur au niveau de notre template afin d'avoir une bonne expérience utilisateur.
Pas de panique ! Une solution existe 😁
Levons nos verres 🥂 à la directive*ngrxLetde la bibliothèque@ngrx/component.
En effet, la directive *ngrxLet, en plus de ce que le pipe async permet de faire déjà, récupère les trois (03) évènements liés à la souscription d'un Observable à savoir :
nexterrorcomplete
Examinons ce code :
<ng-container *ngrxLet="number$ as n; error as e; complete as c">
<app-number [number]="n" *ngIf="!e && !c">
</app-number>
<p *ngIf="e">There is an error: {{ e }}</p>
<p *ngIf="c">Observable is completed.</p>
</ng-container>
numbers$est unObservable. Lorsqu'on souscrit à ce dernier au niveau de la classe TS, voici ce à quoi on devrait s'attendre :
number$.subscribe({
next: x => console.log(x),
error: err => console.error(err),
complete: () => console.log('Observer got a complete notification')
});
En comparaison avec le code HTML précédent, on a :
number$ as n=>nexterror as e=>errorcomplete as c=>complete
Pour rajouter cette directive à votre projet, voici comment procéder :
Installer le package
@ngrx/component:ng add @ngrx/component@latestAjouter le module
LetModuledans le module de votre composant :import { LetModule } from '@ngrx/component'; imports: [ // ... other imports LetModule, ],
En somme, pour améliorer l'expérience utilisateur de vos applications tout en écrivant moins de code au niveau de votre classe TS, vous savez quoi faire à présent !
Pour plus d'informations 👉 NgRx - Let Directive






