Sobes.tech
Middle

Parlez-moi des principes de l'asynchronie en JavaScript.

sobes.tech IA

Réponse de l'IA

Les principes de l'asynchronie en JavaScript sont basés sur un modèle d'exécution monothread, où les tâches pouvant prendre un temps considérable (par exemple, requêtes réseau, temporisateurs) ne bloquent pas le thread principal, permettant ainsi d'effectuer d'autres actions. Cela est réalisé grâce à :

  • Event Loop (Boucle d'événements) : Mécanisme qui vérifie constamment la file de messages et exécute les tâches qui y sont. Lorsqu'une opération asynchrone se termine, son callback est placé dans la file de tâches.
  • Fonctions de rappel (Callbacks) : Fonctions passées en argument à d'autres fonctions et exécutées après la fin de l'opération asynchrone.
  • Promises (Promesses) : Objets représentant une valeur finale d'une opération asynchrone, qui peut être résolue (fulfilled) ou rejetée (rejected). Facilitent la gestion du code asynchrone, évitant le "callback hell".
  • Async/Await : Sucres syntaxiques sur les promesses, permettant d'écrire du code asynchrone de manière plus lisible et synchrone. Les fonctions marquées async retournent toujours une promesse. L'opérateur await ne peut être utilisé qu'à l'intérieur de fonctions async et suspend l'exécution jusqu'à ce que la promesse soit résolue.

Comparaison des approches :

Approche Lisibilité Gestion des erreurs Exécution parallèle
Callbacks Faible Complexe Peut être non trivial
Promises Moyenne Pratique .all(), .race()
Async/Await Élevée Pratique (try/catch) Légèrement plus complexe

Exemple d'utilisation des promesses :

fetch('/api/data') // Opération asynchrone
  .then(response => response.json()) // Traitement réussi
  .then(data => console.log(data)) // Traitement des données
  .catch(error => console.error('Erreur:', error)); // Gestion des erreurs

Exemple d'utilisation d'Async/Await :

async function fetchData() {
  try {
    const response = await fetch('/api/data'); // Attente de la promesse
    const data = await response.json(); // Attente de la promesse
    console.log(data);
  } catch (error) {
    console.error('Erreur:', error); // Gestion des erreurs
  }
}
fetchData();