Exercice : "Service de Conversion de Devises"

Objectif : Créer un script Node.js qui simule un service de conversion de devises en utilisant des opérations asynchrones. L'exercice mettra en évidence la gestion des callbacks, l'utilisation des promesses, l'implémentation d'async/await et la gestion des erreurs asynchrones.

Partie 1: Callbacks et Gestion des Erreurs

  1. Fonction de Conversion avec Callback :
    • Écrivez une fonction convertCurrency(amount, fromCurrency, toCurrency, callback) qui simule une opération asynchrone pour convertir une somme d'argent d'une devise à une autre.
    • Utilisez setTimeout pour simuler le délai de l'opération asynchrone.
    • Gérez les erreurs en appelant le callback avec un objet d'erreur comme premier argument si la conversion ne peut pas être effectuée (par exemple, si les devises fournies ne sont pas supportées).

Partie 2: Promesses et Async/Await

  1. Refactorisation avec Promesses :

    • Refactorisez convertCurrency pour retourner une promesse au lieu d'utiliser un callback.
    • Gérez les erreurs en rejetant la promesse avec un message d'erreur approprié.
  2. Utilisation d'Async/Await :

    • Créez une fonction asynchrone performConversion qui utilise await pour attendre la conversion de devise et log le résultat.
    • Utilisez un bloc try-catch pour gérer les erreurs de la promesse.

Partie 3: Gestion des Erreurs Asynchrones

  1. Gestion des Erreurs avec Async/Await :
    • Dans la fonction performConversion, assurez-vous que toutes les erreurs potentielles sont capturées et loggées correctement.
    • Testez différents scénarios, y compris des cas où la conversion devrait réussir et échouer.

Exemple de Code pour la Partie 1

function convertCurrency(amount, fromCurrency, toCurrency, callback) {
  const supportedCurrencies = ['USD', 'EUR', 'GBP'];
  
  setTimeout(() => {
    if (!supportedCurrencies.includes(fromCurrency) || !supportedCurrencies.includes(toCurrency)) {
      callback(new Error('Unsupported currency'));
    } else {
      // Simuler un taux de conversion
      const rate = 0.9; // taux fictif pour l'exemple
      const convertedAmount = amount * rate;
      callback(null, convertedAmount);
    }
  }, 1000);
}

// Utilisation de la fonction avec un callback
convertCurrency(100, 'USD', 'EUR', (err, result) => {
  if (err) {
    console.error(err.message);
  } else {
    console.log(`Converted amount: ${result}`);
  }
});

Instructions pour l'étudiant :

  • Complétez la fonction convertCurrency pour qu'elle gère correctement les devises non supportées.
  • Refactorisez la fonction pour utiliser des promesses et implémentez performConversion en utilisant async/await.
  • Assurez-vous de gérer toutes les erreurs potentielles dans performConversion.
  • Testez votre code avec différents montants et devises pour vous assurer qu'il gère correctement les cas de succès et d'échec.

Cet exercice aidera les étudiants à comprendre les différentes façons de gérer l'asynchronicité en Node.js et l'importance de la gestion des erreurs dans les opérations asynchrones.

Modifié le: vendredi 3 novembre 2023, 09:31