Une Promise represente l'achevement futur (ou l'echec) d'une operation asynchrone ainsi que la valeur resultante de celle-ci.
États d'une Promesse
Une promesse est toujours dans l'un des trois etats exclusifs suivants :
- pending (en attente) : Etat initial, ni resolue ni rejetee.
- fulfilled (tenue) : Operation terminee avec succes (
resolve(valeur)). - rejected (rompue) : Operation ayant echoue (
reject(erreur)).
Constructeur et Chaînage de Base
const loadUser = (id) => {
return new Promise((resolve, reject) => {
fetch(`/api/users/${id}`)
.then((res) => {
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
})
.then((data) => resolve(data))
.catch((err) => reject(err));
});
};
loadUser(42)
.then((user) => console.log('Charge avec succes :', user.name))
.catch((err) => console.error('Error:', err.message))
.finally(() => console.log('Requete terminee'));
Méthodes Statiques de Résolution
// Promesse immediatement tenue
const p1 = Promise.resolve('Immediate value');
// Promesse immediatement rejetee
const p2 = Promise.reject(new Error('Immediate failure'));
Combinateurs de Promesses
| Méthode | Comportement | Échoue Quand |
|---|---|---|
Promise.all([p1, p2]) |
Attend que toutes soient tenues avec succes | N'importe quelle promesse est rejetee (arret immediat) |
Promise.allSettled([p1, p2]) |
Attend l'aboutissement de toutes sans jamais rejeter | N'echoue jamais |
Promise.race([p1, p2]) |
Prend l'etat de la premiere promesse reglee | La premiere promesse reglee est rejetee |
Promise.any([p1, p2]) |
Resolue des la premiere promesse tenue avec succes | Toutes les promesses sont rejetees (AggregateError) |
// Promise.all : Attendre plusieurs requetes independantes
const [users, posts] = await Promise.all([
fetchUsers(),
fetchPosts()
]);
// Promise.allSettled : Inspecter l'etat de chaque requete
const results = await Promise.allSettled([reqA(), reqB()]);
results.forEach((res) => {
if (res.status === 'fulfilled') console.log('Value:', res.value);
else console.error('Reason:', res.reason);
});
Syntaxe Équivalente avec Async / Await
async function getUserData(id) {
try {
const res = await fetch(`/api/users/${id}`);
const data = await res.json();
return data;
} catch (err) {
console.error('Failed to retrieve user:', err);
throw err;
}
}