first commit
This commit is contained in:
104
cafe_async_await.js
Normal file
104
cafe_async_await.js
Normal file
@@ -0,0 +1,104 @@
|
||||
// ===================================================================
|
||||
// Machine à café — version avec async/await
|
||||
// ===================================================================
|
||||
|
||||
/**
|
||||
* @typedef {object} CoffeeMachineConfig
|
||||
* @property {number} TEMPS_SELECTION - Temps en ms pour sélectionner le café.
|
||||
* @property {number} TEMPS_MOUTURE - Temps en ms pour moudre les grains.
|
||||
* @property {number} TEMPS_CHAUFFAGE - Temps en ms pour chauffer l'eau.
|
||||
* @property {number} TEMPS_PREPARATION - Temps en ms pour la préparation finale.
|
||||
* @property {number} CLEANING_TIME - Temps en ms pour laver la tasse.
|
||||
*/
|
||||
|
||||
/** @type {CoffeeMachineConfig} */
|
||||
const config = {
|
||||
TEMPS_SELECTION: 500,
|
||||
TEMPS_MOUTURE: 700,
|
||||
TEMPS_CHAUFFAGE: 1000,
|
||||
TEMPS_PREPARATION: 500,
|
||||
TEMPS_NETTOYER: 600,
|
||||
};
|
||||
|
||||
// --- API de la machine à café (fonctions "promisifiées") ---
|
||||
// Chaque fonction retourne une Promise, simulant une opération asynchrone.
|
||||
// Cette encapsulation sépare la "logique métier" de son orchestration.
|
||||
|
||||
const coffeeApi = {
|
||||
/**
|
||||
* Simule la sélection d'un type de café.
|
||||
* @param {string} coffeeName - le nom du café à sélectionner.
|
||||
* @returns {Promise<string>} une promesse qui se résout avec le nom du café. Rejette si aucun nom n'est fourni.
|
||||
*/
|
||||
selectionnerCafe(coffeeName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log(` - Sélection du café : ${coffeeName}...`);
|
||||
setTimeout(() => {
|
||||
if (!coffeeName) {
|
||||
return reject(new Error("Aucun type de café n'a été spécifié."));
|
||||
}
|
||||
console.log(` -> Café "${coffeeName}" sélectionné.`);
|
||||
resolve(coffeeName);
|
||||
}, config.TEMPS_SELECTION);
|
||||
});
|
||||
},
|
||||
|
||||
// TODO : implémenter les autres fonctions de l'API de la machine à café.
|
||||
|
||||
};
|
||||
|
||||
|
||||
// --- Orchestration des Scénarios ---
|
||||
|
||||
/**
|
||||
* Scénario 1 : préparation simple.
|
||||
* Les tâches s'exécutent les unes après les autres. Simple mais plus lent.
|
||||
*/
|
||||
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.
|
||||
|
||||
//console.log(`\nSUCCÈS : votre ${finalCoffee} est servi !`);
|
||||
} catch (error) {
|
||||
console.error("ERREUR : la préparation a échoué.", error.message);
|
||||
} finally {
|
||||
console.timeEnd("Temps total (séquentiel)");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scénario 2 : préparation optimisée avec exécution concurrente de certaines tâches.
|
||||
* Les tâches indépendantes (moudre, chauffer, laver) sont lancées en même temps.
|
||||
*/
|
||||
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 !`);
|
||||
} catch (error) {
|
||||
console.error("ERREUR (optimisé) : la préparation a échoué.", error.message);
|
||||
} finally {
|
||||
console.timeEnd("Temps total (optimisé)");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Point d'entrée principal pour lancer les démonstrations.
|
||||
*/
|
||||
async function main() {
|
||||
console.log("=".repeat(50));
|
||||
console.log("Démonstration de la gestion asynchrone en JavaScript");
|
||||
console.log("=".repeat(50));
|
||||
await runSequentialPreparation();
|
||||
console.log("\n" + "-".repeat(50) + "\n");
|
||||
await runOptimizedPreparation();
|
||||
}
|
||||
|
||||
// Lancement du script
|
||||
main();
|
||||
Reference in New Issue
Block a user