From 394dd6d0dd8c170ed65bde2ecca70ab791b2ff75 Mon Sep 17 00:00:00 2001 From: nlarrea Date: Sat, 15 Jun 2024 11:51:07 +0200 Subject: [PATCH] #21 - javascript --- Roadmap/21 - CALLBACKS/javascript/nlarrea.js | 86 ++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Roadmap/21 - CALLBACKS/javascript/nlarrea.js diff --git a/Roadmap/21 - CALLBACKS/javascript/nlarrea.js b/Roadmap/21 - CALLBACKS/javascript/nlarrea.js new file mode 100644 index 0000000000..9346f230d4 --- /dev/null +++ b/Roadmap/21 - CALLBACKS/javascript/nlarrea.js @@ -0,0 +1,86 @@ +/* + * EJERCICIO: + * Explora el concepto de callback en tu lenguaje creando un ejemplo + * simple (a tu elección) que muestre su funcionamiento. + * + * DIFICULTAD EXTRA (opcional): + * Crea un simulador de pedidos de un restaurante utilizando callbacks. + * Estará formado por una función que procesa pedidos. + * Debe aceptar el nombre del plato, una callback de confirmación, una + * de listo y otra de entrega. + * - Debe imprimir un confirmación cuando empiece el procesamiento. + * - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre + * procesos. + * - Debe invocar a cada callback siguiendo un orden de procesado. + * - Debe notificar que el plato está listo o ha sido entregado. + */ + + +function greeting(user, callback) { + console.log('This is the greeting process...'); + callback(user); +} + + +function greetUser(user) { + console.log(`Welcome ${user}!`); +} + + +greeting('nlarrea', greetUser); + + +/* + * DIFICULTAD EXTRA (opcional): + * Crea un simulador de pedidos de un restaurante utilizando callbacks. + * Estará formado por una función que procesa pedidos. + * Debe aceptar el nombre del plato, una callback de confirmación, una + * de listo y otra de entrega. + * - Debe imprimir un confirmación cuando empiece el procesamiento. + * - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre + * procesos. + * - Debe invocar a cada callback siguiendo un orden de procesado. + * - Debe notificar que el plato está listo o ha sido entregado. + */ + + +function orderProcess( + dish, confirmCallback, readyCallback, deliveredCallback +) { + const randTime = (min, max = 0) => { + [min, max] = [Math.min(min, max), Math.max(min, max)]; + return Math.floor(Math.random() * (max - min) + min) * 1000; + }; + + setTimeout(() => { + confirmCallback(dish); + + setTimeout(() => { + readyCallback(dish); + + setTimeout(() => { + deliveredCallback(dish); + }, randTime(1, 5)); + }, randTime(1, 5)); + }, randTime(1, 5)); +} + + +function orderConfirmation(dish) { + console.log(`The order '${dish}' is confirmed.`); +} + + +function orderReady(dish) { + console.log(`The order '${dish}' is ready.`); +} + + +function orderDelivered(dish) { + console.log(`The order '${dish}' has been delivered.`); +} + + +orderProcess( + 'Tonkotsu Ramen', orderConfirmation, orderReady, orderDelivered +); \ No newline at end of file