Les promesses et async/await sont deux concepts clés dans la gestion de l'asynchronicité en JavaScript et Node.js. Ils permettent d'écrire du code asynchrone de manière plus lisible et plus facile à maintenir, comparé à l'ancienne approche basée sur les callbacks.

Promesses

Une promesse est un objet qui représente l'achèvement ou l'échec éventuel d'une opération asynchrone. Elle peut se trouver dans l'un des trois états suivants :

  • Pending : état initial, ni accomplie ni rejetée.
  • Fulfilled : signifie que l'opération a été accomplie avec succès.
  • Rejected : signifie que l'opération a échoué.

Voici un exemple de création et d'utilisation d'une promesse :

let myPromise = new Promise((resolve, reject) => {
  // Une opération asynchrone (par exemple, lire un fichier)
  fs.readFile('file.txt', 'utf8', (err, data) => {
    if (err) {
      reject(err); // La promesse est rejetée si une erreur survient
    } else {
      resolve(data); // La promesse est résolue avec les données du fichier
    }
  });
});

myPromise
  .then(data => {
    console.log(data); // Traiter les données
  })
  .catch(error => {
    console.error(error); // Gérer l'erreur
  });

 

Async/Await

async/await est une extension des promesses qui simplifie encore plus la syntaxe pour travailler avec des opérations asynchrones, permettant d'écrire du code asynchrone qui ressemble à du code synchrone séquentiel.

  • async : Le mot-clé async est utilisé pour déclarer une fonction asynchrone, qui renvoie une promesse.
  • await : Le mot-clé await est utilisé pour attendre la résolution d'une promesse à l'intérieur d'une fonction async. Il ne peut être utilisé qu'à l'intérieur des fonctions async.

Voici comment vous pouvez utiliser async/await :

async function readFileAsync() {
  try {
    let data = await fs.promises.readFile('file.txt', 'utf8');
    console.log(data); // Traiter les données
  } catch (error) {
    console.error(error); // Gérer l'erreur
  }
}

readFileAsync();

 

Avantages de Async/Await

  • Clarté : Le code est plus facile à lire et à comprendre.
  • Gestion des erreurs : Les erreurs peuvent être capturées avec des blocs try/catch, ce qui est une approche familière pour de nombreux développeurs.
  • Débogage : Comme le code ressemble à du code synchrone, il est souvent plus facile à déboguer.
  • Maintenabilité : Le code est généralement plus propre et plus facile à maintenir.

Bonnes Pratiques

  • Utilisez async/await pour simplifier le code impliquant des promesses.
  • Attrapez toujours les erreurs avec des blocs try/catch autour des opérations await.
  • N'utilisez pas await dans des boucles si les opérations peuvent être exécutées en parallèle. À la place, utilisez Promise.all pour attendre plusieurs promesses simultanément.
  • Évitez d'utiliser await inutilement pour des opérations qui sont déjà synchrones, car cela peut introduire des retards inutiles.

En adoptant les promesses et async/await, vous pouvez écrire un code asynchrone qui est non seulement performant mais aussi plus facile à lire et à maintenir.

Modifié le: jeudi 2 novembre 2023, 07:50