JavaScriptLección 15 de 16
Promesas y async/await
Un servidor, un archivo o un temporizador nunca responden al instante, y el programa no debe quedarse congelado esperando. Una promesa representa un valor que llega un poco más tarde, y await permite esperarlo como si el código fuera en orden.
Lo esencial
- new Promise((resolve, reject) => …): resolve entrega el resultado y reject un error
- Una función async siempre devuelve una promesa, y await dentro de ella espera el resultado
- Los errores de await se atrapan con un try...catch normal
- El orden: primero todo el código normal, luego las promesas y después los temporizadores, incluso setTimeout con 0
- Promise.all([…]) espera varias promesas a la vez
Ejemplo
console.log("1: code runs top to bottom");setTimeout(() => console.log("4: a timer, even with 0 ms"), 0);Promise.resolve().then(() => console.log("3: a resolved promise"));console.log("2: still the same pass"); const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); async function later() { await wait(0); console.log("5: after await"); return "result";} later().then((value) => console.log("6:", value));Los números muestran el orden real: las líneas normales, luego la promesa y luego el temporizador. later() esperó un temporizador con await y su return llegó a then.
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 track(id): espera getOrder(id) con await e imprime Order 7: Margherita in 20 min y, si el pedido no existe, atrapa el error con try...catch e imprime su message. Salida: Checking orders..., Order 7: Margherita in 20 min, Order 9 not found y All done.
Salida
Aquí aparecerá lo que imprima el programa.