Retour au cours

Observables vs Promises : Différences clés

Le Développeur Angular Complet : de Zéro à Héros

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éristiquePromiseObservable
ValeursValeur unique (se résout ou échoue une fois).Valeurs multiples au fil du temps (un flux).
ExécutionImmédiate (s'exécute dès la création).Paresseuse (ne s'exécute que lors de l'abonnement).
AnnulationNon annulable.Facilement annulable via unsubscribe().
OpérateursAucun intégré.Riche collection d'opérateurs fonctionnels (map, filter, retry).
Cas d'usageTâ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.