Angular anti-pattern: les Observables et le désabonnement

Tiburce SOTOHOUTiburce SOTOHOU
1 min read

Les observables peuvent causer des fuites de mémoire si l'on ne prend pas la précaution de se désabonner.

// Don't do that
this.postService.getPosts().subscribe(
    posts => this.posts = posts;
)

Avant la sortie d'Angular 16, diverses techniques de désabonnement automatique étaient utilisées. Par exemple :

La plus simple de toutes ces techniques est le pipe async, car il prend en charge la souscription, la récupération des données et le désabonnement à notre place.

Avec l'arrivée d'Angular 16, les choses ont beaucoup évolué grâce au nouvel opérateur takeUntilDestroyed. Cet opérateur termine l'observable lorsque le contexte appelant (composant, directive, service, pipe, etc.) est détruit.

// Official Angular operator for automatic unsubscriptions
this.postService.getPosts().pipe(
    takeUntilDestroyed()
).subscribe(
    posts => this.posts = posts;
)

Mais une technique spéciale consiste à utiliser takeUntilDestroyed directement dans le service qui expose l'observable, de la manière suivante :

getPosts(): Observable<Post> {
    // This is done once for all
    // Nothing else to do in your components
    return this.http.get<Post>(...).pipe(
        takeUntilDestroyed()
    );
}

Ainsi, tous vos composants sont couverts, que vous utilisiez async ou non.

0
Subscribe to my newsletter

Read articles from Tiburce SOTOHOU directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Tiburce SOTOHOU
Tiburce SOTOHOU

Je suis Tiburce SOTOHOU, Développeur Sénior Java / Angular, passionné par les Technologies Web, les Architectures Logicielles et la Cybersécurité. Je partage mes connaissances et mes découvertes sur les écosystèmes Angular et Java.