async/await est la syntaxe la plus moderne et la plus lisible pour gérer les opérations asynchrones en JavaScript. Elle a été introduite dans ES2017 et transforme radicalement la façon dont on écrit du code asynchrone.
Pourquoi c'est génial ? Au lieu d'enchaîner des .then(), on écrit du code asynchrone qui ressemble à du code synchrone normal. C'est plus facile à lire, à écrire et à déboguer !
Dans ce cours : La syntaxe async/await, le mot-clé await, la gestion d'erreurs avec try/catch, comparaison avec .then(), et comment refactoriser du code existant.
Le mot-clé async devant une fonction indique qu'elle retourne toujours une Promise.
💡 Utilisation :
await permet d'attendre qu'une Promise se résolve. Il ne peut être utilisé que dans une fonction async.
⚠️ Important : await "pause" l'exécution de la fonction jusqu'à ce que la Promise se résolve.
Avec async/await, on utilise try/catch au lieu de .catch() pour gérer les erreurs.
✅ Bonne pratique : Toujours wrapper vos await dans un try/catch !
Avantages :
Quand l'utiliser ?
Problèmes : Imbrications, difficile à lire, erreurs à gérer à plusieurs endroits
Avantages : Linéaire, facile à lire, une seule gestion d'erreur
Récupère un utilisateur aléatoire avec async/await :
Charge un utilisateur, puis tous ses articles (2 requêtes séquentielles) :
Charge 3 utilisateurs EN PARALLÈLE (plus rapide) :
Tente de charger un utilisateur qui n'existe pas :
👆 Testez ces exemples dans la console interactive !
🎯 Objectifs de ce cours :
✅ Maîtriser la syntaxe async function
✅ Utiliser le mot-clé await correctement
✅ Gérer les erreurs avec try/catch
✅ Comprendre la différence entre .then() et async/await
✅ Savoir quand utiliser Promise.all() pour des requêtes parallèles
📖 Points clés à retenir :
• async devant une fonction la transforme en fonction qui retourne une Promise
• await ne peut être utilisé QUE dans une fonction async
• await "pause" l'exécution jusqu'à ce que la Promise se résolve
• Utilisez try/catch pour gérer les erreurs avec async/await
• Promise.all() permet d'exécuter plusieurs Promises en parallèle
• async/await rend le code asynchrone plus lisible et plus facile à déboguer
🏋️ Exercices pratiques :
1. Refactoring : Prenez le code avec .then() du cours précédent et convertissez-le en async/await
2. Chaîne de requêtes : Récupérez un article, puis son auteur, puis tous les articles de cet auteur (avec async/await)
3. Gestion d'erreur : Créez une fonction qui teste si une URL répond correctement (try/catch)
4. Promise.all() : Chargez les 10 utilisateurs de JSONPlaceholder en parallèle et affichez leurs noms
5. Loading state : Créez une fonction qui affiche "Chargement...", charge des données, puis affiche "Terminé !"
💡 Astuces pro :
• Séquentiel vs Parallèle : Si les requêtes sont indépendantes, utilisez Promise.all() pour les lancer en parallèle (plus rapide !)
• Top-level await : Dans les modules ES6, vous pouvez utiliser await directement sans async function
• Débogage : async/await est plus facile à déboguer car la stack trace est plus claire
• En production, combinez async/await avec des loading states pour une meilleure UX
