Skip to content

Commit ce4f388

Browse files
committed
#21 - javascript
1 parent 43c407b commit ce4f388

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/*
2+
* EJERCICIO:
3+
* Explora el concepto de callback en tu lenguaje creando un ejemplo
4+
* simple (a tu elección) que muestre su funcionamiento.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
8+
Estará formado por una función que procesa pedidos.
9+
* Debe aceptar el nombre del plato, una callback de confirmación, una
10+
* de listo y otra de entrega.
11+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
12+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
13+
* procesos.
14+
* - Debe invocar a cada callback siguiendo un orden de procesado.
15+
* - Debe notificar que el plato está listo o ha sido entregado.
16+
*/
17+
18+
function sleep(ms){
19+
return new Promise(resolve => setTimeout(resolve, ms));
20+
}
21+
22+
async function main(){
23+
await task_callback(tarea(), callback)
24+
}
25+
26+
async function task_callback(tarea, callback){
27+
await tarea,
28+
callback()
29+
}
30+
31+
async function tarea(){
32+
console.log("Sumando numeros..")
33+
await sleep(2 * 1000)
34+
console.log("Tarea Finalizada")
35+
}
36+
37+
function callback(){
38+
console.log("Funcion invocada luego de terminar task")
39+
}
40+
41+
main()
42+
43+
44+
////////////////////// ------------------------ EXTRA -------------------------------- ////////////////////////////
45+
46+
const menu = ["Hamburguesa", "Pizza", "Tacos", "Ensalada Cesar", "Pollo Frito"]
47+
48+
function sleep(ms){
49+
return new Promise(resolve => setTimeout(resolve, ms));
50+
}
51+
52+
async function order_process(plato, confirmarCallback, readyCallback, deliveryCallback){
53+
54+
confirmarCallback(plato)
55+
56+
const preparation_time = Math.floor(Math.random() * 10) + 1;
57+
console.log(`Preparando ${plato}...(espera ${preparation_time} segundos)`);
58+
await sleep(preparation_time * 1000);
59+
60+
readyCallback(plato);
61+
62+
const delivery_time = Math.floor(Math.random() * 10) + 1;
63+
console.log(`Entregando ${plato}...(espera ${delivery_time} segundos)`);
64+
await sleep(delivery_time * 1000);
65+
66+
deliveryCallback(plato);
67+
}
68+
69+
function confirmarPedido(plato){
70+
console.log(`Pedido confirmado: ${plato}`);
71+
}
72+
73+
function pedidoListo(plato){
74+
console.log(`Pedido listo: ${plato}`);
75+
}
76+
77+
function entregarPedido(plato){
78+
console.log(`Pedido entregado: ${plato}`);
79+
}
80+
81+
function mostrarMenu_y_pedido(){
82+
console.log("Menu de platos disponible");
83+
menu.forEach((plato, id) =>{
84+
console.log(`${id + 1}. ${plato}`);
85+
});
86+
87+
return new Promise((resolve) => {
88+
const readline = require('readline').createInterface({
89+
input: process.stdin,
90+
output: process.stdout
91+
});
92+
93+
readline.question("\nIngrese el numero de plato que desea pedir: ", (numero) => {
94+
const election = parseInt(numero);
95+
if (election >= 1 && election <= menu.length) {
96+
readline.close();
97+
resolve(menu[election - 1]);
98+
}else{
99+
console.log("Numero invalido porfavor intente nuevamente.");
100+
readline.close();
101+
resolve(mostrarMenu_y_pedido());
102+
}
103+
});
104+
});
105+
106+
}
107+
108+
async function realizarPedidos(){
109+
console.log("Simulador de pedidos de un restaurante\n");
110+
111+
const platoElegido = await mostrarMenu_y_pedido();
112+
113+
await order_process(platoElegido, confirmarPedido, pedidoListo, entregarPedido);
114+
}
115+
116+
realizarPedidos();
117+

0 commit comments

Comments
 (0)