Aller au contenu principal

Observables et RxJS

Angular utilise RxJS (Reactive Extensions for JavaScript) pour la gestion asynchrone avec les Observables.

Qu'est-ce qu'un Observable ?

Un Observable est un flux de données asynchrones pouvant émettre plusieurs valeurs au fil du temps.
Des exemples :

  • Les requêtes HTTP (HttpClient).
  • La gestion des événements utilisateur.
  • La communication entre composants.

Création et Souscription à un Observable

Création d'un Observable

import { Observable } from 'rxjs';

const monObservable = new Observable(observer => {
observer.next('Première valeur');
observer.next('Deuxième valeur');
observer.complete(); // Fin du flux
});

Souscription

monObservable.subscribe({
next: valeur => console.log(valeur), // Réception des valeurs
complete: () => console.log('Observable terminé'),
});

Opérateurs RxJS essentiels

Les opérateurs permettent de manipuler les flux de données dans RxJS.

Opérateurs de transformation

  • map(val => ...) : Transforme chaque valeur.
    observable.pipe(map(val => val * 2));
  • filter(val => ...) : Filtre les valeurs.
    observable.pipe(filter(val => val > 10));
  • tap(val => console.log(val)) : Effectue une action sans modifier la valeur.

Opérateurs de combinaison

  • merge(observable1, observable2) : Fusionne plusieurs observables.
  • concat(observable1, observable2) : Exécute les observables l’un après l’autre.

Opérateurs temporels

  • debounceTime(500) : Ignore les valeurs rapides, utile pour limiter les appels API.
  • throttleTime(1000) : Limite la fréquence d’émission des valeurs.

Observables vs Promises

ObservablesPromises
Émettent plusieurs valeursRésolvent une seule valeur
Annulables avec unsubscribe()Non annulables
Fonctionnent par paresse (lazy)Exécutées immédiatement
Opérateurs RxJS pour la transformationthen() et catch() pour la gestion

Conversion entre Observables et Promises

  • Observable → Promise :
    monObservable.toPromise().then(val => console.log(val));
  • Promise → Observable :
    import { from } from 'rxjs';

    const monObservable = from(fetch('https://api.exemple.com/data'));

Exemple : Utilisation avec HttpClient

Requête HTTP avec HttpClient et Observables

import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

export class MonService {
constructor(private http: HttpClient) {}

getData(): Observable<any> {
return this.http.get('https://jsonplaceholder.typicode.com/posts');
}
}

Souscription dans un composant

this.monService.getData().subscribe(data => {
console.log('Données reçues :', data);
});

Annulation d'un Observable (unsubscribe)

import { Subscription } from 'rxjs';

let subscription: Subscription = this.monService.getData().subscribe();
subscription.unsubscribe(); // Stoppe l’écoute de l’Observable

Ressources

Documentation Officielle Angular

Fiches à télécharger

Tu peux télécharger ce devento en plusieurs formats :


Cette fiche a été publiée en premier sur https://nathaniel-vaur-henel.github.io/ par Nathaniel Vaur Henel sous licence Attribution 4.0 International