first commit
This commit is contained in:
83
cafe_callbacks.js
Normal file
83
cafe_callbacks.js
Normal file
@@ -0,0 +1,83 @@
|
||||
// ===================================================================
|
||||
// Machine à café — version avec callbacks
|
||||
// ===================================================================
|
||||
|
||||
// --- Configuration des temps de préparation (en millisecondes) ---
|
||||
const TEMPS_SELECTION = 500;
|
||||
const TEMPS_MOUTURE = 700;
|
||||
const TEMPS_CHAUFFAGE = 1000;
|
||||
const TEMPS_PREPARATION = 500;
|
||||
|
||||
// --- PARTIE 1 : fonctions asynchrones de base (avec callbacks) ---
|
||||
// Ces fonctions simulent des opérations asynchrones (ex: I/O, requête réseau)
|
||||
// en utilisant un callback comme dernier argument.
|
||||
// Convention : le callback est appelé avec (erreur, resultat).
|
||||
|
||||
/**
|
||||
* Simule la sélection d'un type de café.
|
||||
* @param {string} nomCafe - le nom du café à sélectionner.
|
||||
* @param {function(Error|null, string?)} callback - la fonction à appeler une fois l'opération terminée.
|
||||
*/
|
||||
function selectionnerCafe(nomCafe, callback) {
|
||||
console.log(`1. Sélection du café : ${nomCafe}...`);
|
||||
setTimeout(() => {
|
||||
console.log(` -> Café "${nomCafe}" sélectionné.`);
|
||||
// Le premier argument est pour une erreur potentielle (ici, null).
|
||||
// Le second est le résultat.
|
||||
callback(null, nomCafe);
|
||||
}, TEMPS_SELECTION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simule le broyage des grains de café.
|
||||
* @param {string} nomCafe - le nom du café (reçu de l'étape précédente).
|
||||
* @param {function(Error|null, string?)} callback - la fonction de rappel.
|
||||
*/
|
||||
function moudreGrains(nomCafe, callback) {
|
||||
console.log(`2. Broyage des grains pour ${nomCafe}...`);
|
||||
// TODO : implémenter la fonction moudreGrains
|
||||
}
|
||||
|
||||
/**
|
||||
* Simule le chauffage de l'eau.
|
||||
* @param {number} temperature - la température cible.
|
||||
* @param {function(Error|null, string?)} callback - la fonction de rappel.
|
||||
*/
|
||||
function chaufferEau(temperature, callback) {
|
||||
console.log(`3. Chauffage de l'eau à ${temperature}°C...`);
|
||||
// TODO : implémenter la fonction chaufferEau
|
||||
}
|
||||
|
||||
/**
|
||||
* Simule la préparation finale du café.
|
||||
* @param {string} typeCafe - le type de café à préparer.
|
||||
* @param {string} grains - l'ingrédient "grains-moulus".
|
||||
* @param {string} eau - l'ingrédient "eau-chaude".
|
||||
* @param {function(Error|null, string?)} callback - la fonction de rappel finale.
|
||||
*/
|
||||
function preparerCafe(typeCafe, grains, eau, callback) {
|
||||
console.log(`4. Préparation du café ${typeCafe}...`);
|
||||
// TODO : implémenter la fonction preparerCafe
|
||||
}
|
||||
|
||||
|
||||
// --- PARTIE 2 : le "Callback Hell" ---
|
||||
// On imbrique les appels pour garantir l'ordre d'exécution.
|
||||
// Cette structure en "pyramide" est difficile à lire, à débugger et à maintenir.
|
||||
// C'est l'exemple parfait de ce que les Promises et async/await permettent d'éviter.
|
||||
|
||||
console.log("\n--- Lancement de la préparation (avec Callback Hell) ---");
|
||||
|
||||
selectionnerCafe('Expresso', (errSelect, cafeSelectionne) => {
|
||||
// Chaque étape doit vérifier s'il y a eu une erreur à l'étape précédente.
|
||||
if (errSelect) {
|
||||
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".
|
||||
|
||||
});
|
||||
|
||||
console.log("\nMessage affiché PENDANT que le café se prépare (non-bloquant).");
|
||||
|
||||
Reference in New Issue
Block a user