DanLevy.net

Quiz: 9 preguntas sobre Promesas de JavaScript

¡Nunca vuelvas a romper una promesa!

Hero image for Quiz: 9 preguntas sobre Promesas de JavaScript

¿Conoces las Promesas de JavaScript?

  1. Busca Pistas (Botón grande, esquina inferior).
  2. Prueba el código en la Consola de tu navegador (usa el atajo F12 o búscalo) o utiliza repl.it*.
  3. Siéntete libre de twittearme @justsml. ¡Me encantaría conocer tu opinión!

👇 Completa las 9 preguntas abajo 👇

¿Cuál será la salida del siguiente código?

var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))

Creemos una Promise usando el método constructor, provocando un error inmediatamente con el callback reject.

Luego los manejadores .catch funcionan como .addEventListener(event, callback) del DOM o .on(event, callback) de Event Emitter, donde se pueden añadir múltiples callbacks de manejador. Cada uno será llamado con los mismos argumentos.

¿Cuál será la salida del siguiente código?

var p = new Promise((resolve, reject) => {
return Promise.reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))

Cuando se usa el constructor Promise debes invocar ya sea los callbacks resolve() o reject(). El constructor Promise ignora el valor de retorno del ejecutor, por lo que la Promise adicional creada con Promise.reject() no se encadena a p. Los dos manejadores se adjuntan a p, que queda pendiente, mientras que la Promise rechazada devuelta se informa como no manejada por el entorno host.

¿Cuál será la salida del siguiente código?

new Promise((resolve, reject) => {
resolve('Success!')
})
.then(() => {
throw Error('Oh noes!')
})
.catch(error => {
return "actually, that worked"
})
.catch(error => console.log(error.message))

Hint: .catch’s pueden usarse para ignorar (o sobrescribir) errores simplemente devolviendo un valor regular.

Este truco funciona solo cuando hay un .then posterior que reciba el valor.

¿Cuál será la salida del siguiente código?

Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
})

Hint: .then’s pasan datos secuencialmente, desde return value al siguiente .then(value => /* handle value */).

Un return es clave para pasar un valor al siguiente .then.

¿Cuál será la salida del siguiente código?

Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
return data
})
.then(console.log)

Hay 2 llamadas a console.log que se ejecutarán.

¿Cuál será la salida del siguiente código?

Promise.resolve('Success!')
.then(data => {
data.toUpperCase()
})
.then(data => {
console.log(data)
})

Hint: .then’s pasan datos secuencialmente, desde return value al siguiente .then(value => /* handle value */).

Un return es clave para pasar un valor al siguiente .then.

¿Cuál será la salida del siguiente código?

Promise.resolve('Success!')
.then(() => {
throw Error('Oh noes!')
})
.catch(error => {
return 'actually, that worked'
})
.then(data => {
throw Error('The fails!')
})
.catch(error => console.log(error.message))

annotated-code/question-9-4.webp