31. Promesas

Versión para imprimir.

En esta lección se presenta el concepto de promesa y como procesarla.

A. Promesas originales

Promise.resolve("Hola").
 then(s => console.log(
  "Éxito 1:", s)).
 catch(e => console.log(
  "Fallo 1:", e.message))
Promise.reject(new Error("ouch")).
 then(s => console.log(
  "Éxito 2:", s)).
 catch(e => console.log(
  "Fallo 2:", e.message))

Salida

Éxito 1: Hola
Fallo 2: ouch

Depúralo en GilPG Nod.

B. async-await

ejecuta()
async function ejecuta() {
 try {
  const r1 =
   await Promise.resolve("Hola")
  console.log("Éxito 1:", r1)
 } catch (e) {
  console.
   log("Falló 1:", e.message)
 }
 try {
  const r2 = await Promise.reject(
   new Error("ouch"))
  console.log("Éxito 2", r2)
 } catch (e) {
  console.
   log("Falló 2:", e.message)
 }
}

Salida

Éxito 1: Hola
Falló 2: ouch

Depúralo en GilPG Nod.

C. Creación de una promesa

ejecuta()
function fnExito(resolve, reject) {
 setTimeout(
  () => resolve("Hola"),
  5000)
}
function fnFalla(resolve, reject) {
 setTimeout(
  () => reject(new Error("ouch")),
  5000)
}
async function ejecuta() {
 try {
  const r1 =
   await new Promise(fnExito)
  console.log("Éxito 1", r1)
 } catch (e) {
  console.
   log("Falló 1:", e.message)
 }
 try {
  const r2 =
   await new Promise(fnFalla)
  console.log("Éxito 2:", r2)
 } catch (e) {
  console.
   log("Falló 2:", e.message)
 }
}

Salida

Éxito 1 Hola
Falló 2: ouch

Depúralo en GilPG Nod.

D. Promise.all

ejecuta()
/**
 * @param {string} res
 * @param {number} timeout
 */
function prom(res, timeout) {
 return new Promise(
  (resolve, reject) =>
   setTimeout(
    () => {
     if (res !== "") {
      resolve(`Éxito[${res}]`)
     } else {
      reject(new Error(
       `Falla[${res}]`))
     }
    },
    timeout))
}
async function ejecuta() {
 try {
  const r1 = await Promise.all([
   prom("a", 300),
   prom("z", 2000),
   prom("b", 5000)])
  console.
   log("Éxito 1:", r1.join())
 } catch (e) {
  console.
   log("Falló 1:", e.message)
 }
 try {
  const r2 = await Promise.all([
   prom("a", 100),
   prom("", 1000),
   prom("b", 5000)])
  console.log("Éxito 2:", r2)
 } catch (e) {
  console.
   log("Falló 2:", e.message)
 }
}

Salida

Éxito 1: Éxito[a],Éxito[z],Éxito[b]
Falló 2: Falla[]

Depúralo en GilPG Nod.

E. Resumen