diff --git a/cafe_async_await.js b/cafe_async_await.js index c88fc76..81cdba2 100644 --- a/cafe_async_await.js +++ b/cafe_async_await.js @@ -42,9 +42,43 @@ const coffeeApi = { }, config.TEMPS_SELECTION); }); }, - - // TODO : implémenter les autres fonctions de l'API de la machine à café. - + moudreGrains(coffeeName) { + return new Promise((resolve) => { + console.log(` - Broyage des grains pour "${coffeeName}"...`); + setTimeout(() => { + console.log(` -> Grains moulus.`); + resolve('grains-moulus'); + }, config.TEMPS_MOUTURE); + }); + }, + chaufferEau(temperature) { + return new Promise((resolve) => { + console.log(` - Chauffage de l'eau à ${temperature}°C`); + setTimeout(() => { + console.log(` -> Eau chaude prête`); + resolve('eau-chaude'); + }, config.TEMPS_CHAUFFAGE); + }); + }, + nettoyerTasse() { + return new Promise((resolve) => { + console.log(` - Lavage de la tasse...`); + setTimeout(() => { + console.log(` -> Tasse propre.`); + resolve('tasse-propre'); + }, config.TEMPS_NETTOYER); + }); + }, + preparerCafe(coffeeName) { + return new Promise((resolve) => { + console.log(` - Préparation du café ${coffeeName}...`); + setTimeout(() => { + const finalCoffee = `café ${coffeeName} préparé`; + console.log(` -> ${finalCoffee.charAt(0).toUpperCase() + finalCoffee.slice(1)}.`); + resolve(finalCoffee); + }, config.TEMPS_PREPARATION); + }); + } }; @@ -58,9 +92,14 @@ async function runSequentialPreparation() { console.log("\n--- SCÉNARIO 1 : préparation simple ---"); console.time("Temps total (séquentiel)"); try { - // TODO : implémenter le scénario 1 en utilisant async/await. + const coffeeName = 'Lungo'; + const selectedCoffee = await coffeeApi.selectionnerCafe(coffeeName); + await coffeeApi.moudreGrains(selectedCoffee); + await coffeeApi.chaufferEau(95); + await coffeeApi.nettoyerTasse(); + const finalCoffee = await coffeeApi.preparerCafe(selectedCoffee); - //console.log(`\nSUCCÈS : votre ${finalCoffee} est servi !`); + console.log(`\nSUCCÈS : votre ${finalCoffee} est servi !`); } catch (error) { console.error("ERREUR : la préparation a échoué.", error.message); } finally { @@ -76,11 +115,17 @@ async function runOptimizedPreparation() { console.log("\n--- SCÉNARIO 2 : préparation optimisée, avec exécution concurrente de certaines tâches ---"); console.time("Temps total (optimisé)"); try { - // TODO : implémenter le scénario 2 en utilisant async/await et Promise.all. - // Astuce : Promise.all retourne un tableau contenant les résultats des promesses dans le même ordre. - // Vous pouvez utiliser la déstructuration pour les récupérer facilement : const [resultat1, resultat2, ...] = await Promise.all(...) - - //console.log(`\nSUCCÈS (optimisé) : votre ${finalCoffee} est servi !`); + const coffeeName = 'Americano'; + const selectedCoffee = await coffeeApi.selectionnerCafe(coffeeName); + console.log("-> Lancement en parallèle du broyage, du chauffage et du lavage..."); + await Promise.all([ + coffeeApi.moudreGrains(selectedCoffee), // Tâche 1 + coffeeApi.chaufferEau(92), // Tâche 2 + coffeeApi.nettoyerTasse() // Tâche 3 + ]); + console.log("-> Tâches parallèles terminées."); + const finalCoffee = await coffeeApi.preparerCafe(selectedCoffee); + console.log(`\nSUCCÈS (optimisé) : votre ${finalCoffee} est servi !`); } catch (error) { console.error("ERREUR (optimisé) : la préparation a échoué.", error.message); } finally { diff --git a/cafe_callbacks.js b/cafe_callbacks.js index b6c1e5b..80674ef 100644 --- a/cafe_callbacks.js +++ b/cafe_callbacks.js @@ -35,7 +35,10 @@ function selectionnerCafe(nomCafe, callback) { */ function moudreGrains(nomCafe, callback) { console.log(`2. Broyage des grains pour ${nomCafe}...`); - // TODO : implémenter la fonction moudreGrains + setTimeout(() => { + console.log(" -> Grains moulus."); + callback(null, 'grains-moulus'); + }, TEMPS_MOUTURE); } /** @@ -45,7 +48,10 @@ function moudreGrains(nomCafe, callback) { */ function chaufferEau(temperature, callback) { console.log(`3. Chauffage de l'eau à ${temperature}°C...`); - // TODO : implémenter la fonction chaufferEau + setTimeout(() => { + console.log(" -> Eau chaude prête."); + callback(null, 'eau-chaude'); + }, TEMPS_CHAUFFAGE); } /** @@ -57,7 +63,11 @@ function chaufferEau(temperature, callback) { */ function preparerCafe(typeCafe, grains, eau, callback) { console.log(`4. Préparation du café ${typeCafe}...`); - // TODO : implémenter la fonction preparerCafe + setTimeout(() => { + const cafeFinal = `café ${typeCafe} préparé`; + console.log(` -> ${cafeFinal.charAt(0).toUpperCase() + cafeFinal.slice(1)}.`); + callback(null, cafeFinal); + }, TEMPS_PREPARATION); } @@ -74,10 +84,24 @@ selectionnerCafe('Expresso', (errSelect, cafeSelectionne) => { console.error("Erreur de sélection :", errSelect); return; // Arrête l'exécution en cas d'erreur. } - - // TODO : appeler "moudreGrains" avec le café sélectionné, puis "chaufferEau", puis "preparerCafe". - + moudreGrains(cafeSelectionne, (errMoudre, grains) => { + if (errMoudre) { + console.error("Erreur de broyage :", errMoudre); + return; + } + chaufferEau(90, (errChauffe, eau) => { + if (errChauffe) { + console.error("Erreur de chauffage :", errChauffe); + return; + } + preparerCafe(cafeSelectionne, grains, eau, (errPrepare, cafeFinal) => { + if (errPrepare) { + console.error("Erreur de préparation :", errPrepare); + return; + } + console.log(`\nSUCCÈS : Votre ${cafeFinal} est servi !`); + }); + }); + }); }); - -console.log("\nMessage affiché PENDANT que le café se prépare (non-bloquant)."); - +console.log("\nMessage affiché PENDANT que le café se prépare (non-bloquant)."); \ No newline at end of file