TP done
This commit is contained in:
@@ -42,9 +42,43 @@ const coffeeApi = {
|
|||||||
}, config.TEMPS_SELECTION);
|
}, config.TEMPS_SELECTION);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
moudreGrains(coffeeName) {
|
||||||
// TODO : implémenter les autres fonctions de l'API de la machine à café.
|
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.log("\n--- SCÉNARIO 1 : préparation simple ---");
|
||||||
console.time("Temps total (séquentiel)");
|
console.time("Temps total (séquentiel)");
|
||||||
try {
|
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) {
|
} catch (error) {
|
||||||
console.error("ERREUR : la préparation a échoué.", error.message);
|
console.error("ERREUR : la préparation a échoué.", error.message);
|
||||||
} finally {
|
} 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.log("\n--- SCÉNARIO 2 : préparation optimisée, avec exécution concurrente de certaines tâches ---");
|
||||||
console.time("Temps total (optimisé)");
|
console.time("Temps total (optimisé)");
|
||||||
try {
|
try {
|
||||||
// TODO : implémenter le scénario 2 en utilisant async/await et Promise.all.
|
const coffeeName = 'Americano';
|
||||||
// Astuce : Promise.all retourne un tableau contenant les résultats des promesses dans le même ordre.
|
const selectedCoffee = await coffeeApi.selectionnerCafe(coffeeName);
|
||||||
// Vous pouvez utiliser la déstructuration pour les récupérer facilement : const [resultat1, resultat2, ...] = await Promise.all(...)
|
console.log("-> Lancement en parallèle du broyage, du chauffage et du lavage...");
|
||||||
|
await Promise.all([
|
||||||
//console.log(`\nSUCCÈS (optimisé) : votre ${finalCoffee} est servi !`);
|
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) {
|
} catch (error) {
|
||||||
console.error("ERREUR (optimisé) : la préparation a échoué.", error.message);
|
console.error("ERREUR (optimisé) : la préparation a échoué.", error.message);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -35,7 +35,10 @@ function selectionnerCafe(nomCafe, callback) {
|
|||||||
*/
|
*/
|
||||||
function moudreGrains(nomCafe, callback) {
|
function moudreGrains(nomCafe, callback) {
|
||||||
console.log(`2. Broyage des grains pour ${nomCafe}...`);
|
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) {
|
function chaufferEau(temperature, callback) {
|
||||||
console.log(`3. Chauffage de l'eau à ${temperature}°C...`);
|
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) {
|
function preparerCafe(typeCafe, grains, eau, callback) {
|
||||||
console.log(`4. Préparation du café ${typeCafe}...`);
|
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);
|
console.error("Erreur de sélection :", errSelect);
|
||||||
return; // Arrête l'exécution en cas d'erreur.
|
return; // Arrête l'exécution en cas d'erreur.
|
||||||
}
|
}
|
||||||
|
moudreGrains(cafeSelectionne, (errMoudre, grains) => {
|
||||||
// TODO : appeler "moudreGrains" avec le café sélectionné, puis "chaufferEau", puis "preparerCafe".
|
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).");
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user