DEV Community

Cristian Fernando
Cristian Fernando

Posted on

Paracetamol.js馃拪| #210: Explica este c贸digo JavaScript

Explica este c贸digo JavaScript

Dificultad: Avanzado

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 valido`))
    }, 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.race(arr)
    .then((response) => {
      console.log(response)
    })
    .catch(err => console.log(err))
}

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

Respuesta en el primer comentario.


Top comments (1)

Collapse
 
duxtech profile image
Cristian Fernando

Respuesta:

  • D. 15 no es edad valida

Promise.race hace solo una cosa:

  • No le importa si la promesa se resulve o falla, siempre regresar谩 la promesa que tarde menos, osea la que tiene el menor delay.

En nuestro ejemplo, lo 煤nico que debemos ver son los delays correspondientes:

  • getName tarda 3s
  • getAge tarda 2s
  • counterFriends tarda 5s

驴Cual de todos es el menor?
Aja! Es getAge, pero regresa una promesa rechazada. No importa, es la primera en acabar de ejectarse, entonces regresamos su mensaje de error: 15 no es edad valida.