52. Observables vs Promises : Différences clés
Les Promises et les Observables gèrent tous deux des opérations asynchrones, mais leurs capacités et comportements diffèrent considérablement.
| Caractéristique | Promise | Observable |
|---|---|---|
| Valeurs | Valeur unique (se résout ou échoue une fois). | Valeurs multiples au fil du temps (un flux). |
| Exécution | Immédiate (s'exécute dès la création). | Paresseuse (ne s'exécute que lors de l'abonnement). |
| Annulation | Non annulable. | Facilement annulable via unsubscribe(). |
| Opérateurs | Aucun intégré. | Riche collection d'opérateurs fonctionnels (map, filter, retry). |
| Cas d'usage | Tâche unique et immédiate (ex : lecture d'un fichier). | Flux de données continus (HTTP polling, événements, UI). |
1. Promises (Valeur unique, Immédiate)
javascript const promise = new Promise((resolve, reject) => { console.log('La Promise s'exécute MAINTENANT.'); setTimeout(() => resolve('Données reçues'), 1000); });
promise.then(value => console.log(value)); // Même si nous n'appelons jamais .then(), la promise s'exécute.
2. Observables (Valeurs multiples, Paresseuse)
Les Observables sont dits "froids" ; ils ne commencent à émettre des valeurs que lorsqu'un Observer s'y abonne.
typescript import { Observable } from 'rxjs';
const observable = new Observable(observer => { console.log('Configuration de l'Observable, attente de l'abonnement...'); let count = 0; const intervalId = setInterval(() => { observer.next(count++); if (count > 3) { observer.complete(); clearInterval(intervalId); } }, 500);
// Logique de nettoyage (désabonnement) return () => clearInterval(intervalId); });
// Rien ne se passe tant qu'on ne s'abonne pas const subscription = observable.subscribe(value => { console.log('Reçu :', value); });
// Nous pouvons annuler le flux à tout moment // setTimeout(() => subscription.unsubscribe(), 1600);
Angular utilise la capacité de flux des Observables pour sa nature réactive.