JavaScript

Maîtriser Async/Await en JavaScript: Guide Complet 2026

Default Cover
Auteur MEME
Date 06 mars 2026
Lecture 2 min
Vues 34

Maîtriser Async/Await en JavaScript: Guide Complet 2026

Async/await a révolutionné la programmation asynchrone en JavaScript. Voici comment maîtriser cette puissance.

Les Bases

Qu'est-ce qu'une Promise?

const promesse = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Succès!");
}, 1000);
});

promesse.then(resultat => {
console.log(resultat); // "Succès!"
});

Async/Await

async function obtenerDonnees() {
try {
const reponse = await fetch('https://api.exemple.com/data');
const donnees = await reponse.json();
return donnees;
} catch (erreur) {
console.error('Erreur:', erreur);
}
}

// Utilisation
const donnees = await obtenirDonnees();

Gestion des Erreurs Correctement

// ❌ Mauvais
async function mauvais() {
const data = await fetch(url); // Et si erreur?
}

// ✅ Bon
async function bon() {
try {
const response = await fetch(url);

if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}

const data = await response.json();
return data;
} catch (erreur) {
console.error('Erreur API:', erreur);
throw erreur; // Propager l'erreur
}
}

Paralléliser les Requêtes

// ❌ Séquentiel (lent!)
const user = await getUser(1);
const posts = await getPosts(user.id);
const comments = await getComments(posts[0].id);

// ✅ Parallèle (rapide!)
const [user, posts, comments] = await Promise.all([
getUser(1),
getPosts(userId),
getComments(postId)
]);

Timeout pour les Requêtes Longues

function avecTimeout(promesse, ms) {
return Promise.race([
promesse,
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Timeout')), ms)
)
]);
}

// Utilisation
try {
const data = await avecTimeout(fetch(url), 5000);
} catch (e) {
console.error('Requête trop lente');
}

Boucles avec Async

// ❌ Appels parallèles non contrôlés
const items = [1, 2, 3, 4, 5];
items.forEach(async (id) => {
await saveItem(id); // Pas attendu!
});

// ✅ Séquentiel
for (const id of items) {
await saveItem(id);
}

// ✅ Parallèle controlé
const resultats = await Promise.all(
items.map(id => saveItem(id))
);

Retry Logic

async function avecRetry(fn, retries = 3, delai = 1000) {
for (let i = 0; i < retries; i++) {
try {
return await fn();
} catch (erreur) {
if (i === retries - 1) throw erreur;
await new Promise(r => setTimeout(r, delai * (i + 1)));
}
}
}

// Utilisation
const donnees = await avecRetry(
() => fetch(url).then(r => r.json()),
3,
1000
);

Async Générateurs

async function* listerUtilisateurs(pageSize = 10) {
let page = 1;

while (true) {
const response = await fetch(`/api/users?page=${page}`);
const users = await response.json();

if (users.length === 0) break;

for (const user of users) {
yield user;
}

page++;
}
}

// Utilisation
for await (const user of listerUtilisateurs()) {
console.log(user);
}

Bonnes Pratiques

Toujours attendez les promises - Ne pas oublier await
Gestion d'erreurs - Utilisez try/catch
Paralléliser quand possible - Promise.all()
Timeout sur les requêtes - Évitez les hangs infinis
Lisez les logs - Les erreurs async peuvent être cachées

Connectez-vous pour participer à la discussion.

Se connecter

1 Commentaires

M
MEME
07 mars 2026 à 10:53
Pour plus de contenue partager et décrivez vos attente dans les commentaires
Voir tous les articles