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.