DEV Community

Cristian Fernando
Cristian Fernando

Posted on

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

Explica este código JavaScript

Dificultad: Intermedio

const getName = (name) => {
  return new Promise ((resolve, reject) => {
    setTimeout(() => {
      resolve(name)
    },3000)
  })
}

const getAge = (age) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (age < 18) reject(new Error(`${age} no es edad valida`))
    }, 2000)
  })
}

const counterFriends = (friends) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(friends.length)
    }, 5000)
  })
}

const getPromises = () => {
  const arr = [
        getName("Pepe"), 
        getAge(15), 
        counterFriends(["Ana", "Roberto", "Juan"])];
  return Promise.any(arr)
    .then((response) => {
      console.log(response)
    })
    .catch(err => console.log(err))
}

getPromises() 
Enter fullscreen mode Exit fullscreen mode
  • A. 15 no es edad valida
  • B. 3
  • C. Pepe
  • D. Promise { <pending> }
  • E. ["Pepe", "15 no es edad valida", 3]

Respuesta en el primer comentario.


Top comments (1)

Collapse
 
duxtech profile image
Cristian Fernando

Respuesta:

  • C. Pepe

Promise.any hace dos cosas:

  • Discrimina a todas las promesas que no se cumplan.
  • De entre las promesas que si se resuelven, regresa la promesa que tenga el delay mas bajo.

Dicho esto, veamos el ejemplo de nuestro reto:
Tenemos 3 funciones que regresan promesas: getName, getAge y counterFriends.

getAge es la única que todas que no se cumple, por ende la discriminamos para no tomarla en cuenta.

Nos queda getName (tarda 3s) y counterFriends (tarda 5s), ambas se resuelven, entonces debemos ver cual es la que tarda menos; en este caso es getName, por ende en este caso la función getPromises moestrará Pepe por consola.