DEV Community

Cristian Fernando
Cristian Fernando

Posted on

Paracetamol.js💊| #113: Explica este código JavaScript

Explica este código JavaScript

Dificultad: Avanzado

const datos = [
  {
    id:1,
    nombre:"Ana",
    edad:25
  },
  {
    id: 2,
    nombre: "Cris",
    edad: 26
  },
];

const getDatos = () => {
  return new Promise((resolve, reject) => {
    if(datos.length > 0){
      setTimeout(() => {
        resolve(datos)
      },3000-1000)
    }else{
      reject(new Error("Algo ocurrio mal"))
    }
  })
}

getDatos()
  .then((datos) => console.log(datos.filter((item) => item.edad > 25)
                                    .map((item) => item.edad)))
  .catch((error) => console.log(error.message))
  .finally(() => console.log("FIN"))
Enter fullscreen mode Exit fullscreen mode

A. "Algo ocurrio mal", FIN (después de 3000 ms)
B. [], FIN (después de 2000 ms)
C. [26], FIN (después de 2000 ms)
D. Promise { <pending> } (después de 0 ms)

Respuesta en el primer comentario.


Oldest comments (1)

Collapse
 
duxtech profile image
Cristian Fernando

Respuesta:
C. [26], FIN (después de 2000 ms)

getDatos es una función que regresa una promesa.

  • Si el arreglo datos tiene elementos entonces la promesa se satisface después de 2000 ms (el parámetro de tiempo de setTimeout ejecuta operaciones sin ningún problema)
  • Si el arreglo datos no tiene elementos entonces la promesa es rechazada y lanzamos el error.

Al momento de consumir la promesa:

  • Como datos si tiene elementos el catch nunca llega a ejecutarse en este ejemplo.
  • Realizamos un encadenamiento de array methods, una transformación con map para solo ocupar las llaves de edad de data y también un filter para mostrar solo las edades mayores a 25.
  • finally se ejecuta siempre, independientemente si la promesa fue satisfactoria o rechazada.