DanLevy.net

Errores Comunes con Promesas

Evitando errores comunes

Hero image for Errores Comunes con Promesas

Las promesas no funcionan como otros valores

No puedes imprimir su valor como la mayoría de los valores:

// Esto no tiene sentido con promesas:
console.log(Promise.resolve(42));
// Debemos usar la interfaz `.then`:
Promise.resolve(42).then(value => console.log(value));

Las promesas no te advierten cuando cometes un error

Bueno, un error probable.

Por diversas razones, TC39 decidió que a .then y .catch se les puede pasar null. Por ejemplo, .then(null, null) es válido y el comportamiento requerido es saltar ese ‘paso’ en la cadena.

La lamentable consecuencia de esto es que es muy fácil cometer errores.

Por Ejemplo

Veamos un mini desafío: ¿cuál(es) de las siguientes opciones mostrará 42 en consola?

// Opción #1:
Promise.resolve(42).then(console.log());
// Opción #2:
Promise.resolve(42).then(console.log);
// Opción #3:
Promise.resolve(42).then(value => console.log(value));
// Opción #4:
Promise.resolve(42)
.then(console.log())
.then(console.log);
La Respuesta

La respuesta es #2, #3 y #4.

¿Por qué? Veamos los tipos de lo que se pasó a .then():

var arg1 = console.log();
var arg2 = console.log;
var arg3 = value => console.log(value);
typeof arg1 === "undefined";
typeof arg2 === "function";
typeof arg3 === "function";

¿Todavía te preguntas cómo funciona esa cuarta opción?

Efectivamente se ejecuta así:

// Opción #4 - efectivamente
Promise.resolve(42)
.then(undefined) // esto no tiene ningún efecto en el valor, se pasará al siguiente `.then(fn)`
.then(console.log);