Aller au contenu principal
Publié le

Async/Await en JavaScript

Partager :

Introduction

L'introduction de async et await dans JavaScript ES7 a marqué une avancée significative dans la façon d'écrire et de gérer le code asynchrone. Cet article explore en détail comment utiliser async et await pour gérer diverses situations asynchrones, en mettant l'accent sur les patterns avancés et les meilleures pratiques.

Concepts Fondamentaux d'Async/Await

Async

Une fonction déclarée comme async retourne implicitement une Promise, et la valeur retournée par la fonction est utilisée pour résoudre cette Promise.

async function operationAsynchrone() {
  return 'Résultat';
}

// Retourne une Promise qui se résout avec 'Résultat'

Await

Await est utilisé à l'intérieur de fonctions async pour suspendre l'exécution de la fonction jusqu'à ce que la Promise soit résolue ou rejetée.

async function obtenirLesDonnees(url) {
  let reponse = await fetch(url);
  let donnees = await reponse.json();

  return donnees;
  // L'exécution se suspend jusqu'à la résolution de la Promise de fetch
}

Patterns Avancés d'Utilisation

Exécution Parallèle

Pour exécuter des opérations asynchrones en parallèle, vous pouvez utiliser Promise.all avec await.

async function chargerLesDonneesEnParallele(urls) {
  let promises = urls.map((url) => fetch(url).then((res) => res.json()));
  return await Promise.all(promises);
}

Await dans une Boucle

Bien qu'il soit généralement recommandé d'éviter await à l'intérieur des boucles, dans certains cas — par exemple lorsque les opérations doivent être séquentielles — cela peut s'avérer nécessaire.

async function traitementSequentiel(urls) {
  for (let url of urls) {
    let donnees = await fetch(url).then((res) => res.json());
    console.log(donnees);
  }
}

Gestion des Erreurs avec Async/Await

La gestion des erreurs dans les fonctions async s'effectue via des blocs try-catch.

Capturer les Erreurs

async function chargerLesDonnees(url) {
  try {
    let reponse = await fetch(url);
    return await reponse.json();
  } catch (erreur) {
    console.error('Erreur lors du chargement des données :', erreur);
  }
}

Bonnes Pratiques et Conseils

  1. Utilisez Async/Await dans les Contextes Appropriés: Évitez d'utiliser async et await pour des opérations simples qui ne bénéficient pas de l'asynchronie.
  2. Évitez l'Await Inutile: N'utilisez pas await avec des opérations déjà synchrones, car cela peut introduire des délais superflus.
  3. Combinez avec les Promises si Nécessaire: Dans les situations complexes, la combinaison d'async/await avec l'API traditionnelle des Promises peut offrir plus de flexibilité.
  4. Utilisez Async/Await pour Simplifier le Code Asynchrone: Plutôt que d'enchaîner plusieurs Promises avec .then(), envisagez de restructurer le code en utilisant async/await pour plus de clarté.

Démystifier Async/Await

Erreurs Courantes

  • Oublier await: Oublier d'ajouter await peut conduire à des comportements inattendus, car le code suivant peut s'exécuter avant la fin de l'opération asynchrone.
  • Blocage Involontaire: Une utilisation inappropriée de await peut bloquer l'exécution d'autres opérations asynchrones importantes.

Utilisation dans les Fonctions Anonymes

Async/await peut également être utilisé dans des fonctions anonymes :

document.addEventListener('click', async function () {
  let donnees = await chargerLesDonnees('https://api.exemple.com');
  console.log(donnees);
});

Conclusion

Async et await ont transformé l'approche de la programmation asynchrone en JavaScript, rendant le code plus intuitif et plus facile à suivre. Comprendre comment appliquer ces concepts de manière efficace est crucial pour tout développeur travaillant avec JavaScript, en particulier dans les applications web modernes qui dépendent fortement des opérations asynchrones.

Happy coding!