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?

  • ¡Demuestra tu dominio 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))

El primer .catch maneja el rechazo y devuelve la cadena "actually, that worked", por lo que la promesa resultante se cumple. El segundo .catch se omite y no se imprime nada. No hace falta un .then posterior para que el rechazo quede manejado.

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

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

Pista: .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)
})

Pista: .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))

El primer .catch maneja el rechazo devolviendo una cadena sin imprimir nada. El siguiente .then lanza Error('The fails!'), y el último .catch imprime solo su mensaje: The fails!.

Código anotado del flujo de la promesa: el último catch imprime The fails!