JavaScriptLección 16 de 16
Proyecto final: el carrito de una tienda online
Toca juntarlo todo. El carrito de una tienda pequeña es una clase, arrays y sus métodos, errores, un closure, JSON y un pago asíncrono en un solo programa.
Lo esencial
- Cart guarda items y ofrece add, total y lines
- Un producto desconocido lanza new Error, y fuera lo atiende try...catch
- La suma sale de reduce y las líneas del ticket, de map con desestructuración
- El cupón vive en un closure: funciona una vez y la segunda ya no hay descuento
- El pago es una promesa con setTimeout, y await espera el resultado
Ejemplo
// The pieces of the project in one placeconst prices = { mug: 12, cap: 18 };const order = [["mug", 2], ["cap", 1]]; const sum = order.reduce((total, [id, qty]) => total + prices[id] * qty, 0);console.log(`Sum: ${sum}`); function makeLimiter(max) { let used = 0; return () => (used < max ? `ok ${++used}` : "limit reached");}const tryCode = makeLimiter(1);console.log(tryCode(), tryCode()); const saved = JSON.stringify({ sum });console.log(saved, JSON.parse(saved).sum === sum);El ejemplo es un calentamiento: reduce que desestructura cada par [id, qty], un limitador hecho con un closure y la comprobación de que JSON devuelve la misma suma.
Tarea
Cómo usar el editor⌘ Enter o Ctrl Enter ejecuta el código, ⇧ ⌘ Enter comprueba la tarea.Tab y Mayús Tab sangran la línea o la selección; Esc y luego Tab sale del editor.La comprobación compara lo que imprimió el programa con la tarea; los espacios al final de línea no cuentan.Tras dos comprobaciones fallidas puedes ver la solución. Tu código se guarda en este navegador.Completa el carrito. add(id, qty) busca el producto en catalog (si no está, throw new Error(`Unknown product: ${id}`)) y aumenta qty o añade { id, ...product, qty }; total es la suma de price * qty; lines() devuelve líneas como Mug x3 = 36; makePromo aplica el descuento percent solo una vez. Salida: Unknown product: sofa, Mug x3 = 36, T-shirt x1 = 25, Total: 54.90, Promo again: 61.00, {"items":2,"total":54.9} y Paid 54.90.
Salida
Aquí aparecerá lo que imprima el programa.