Errores Comunes con Promesas
Evitando errores comunes
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 - efectivamentePromise.resolve(42) .then(undefined) // esto no tiene ningún efecto en el valor, se pasará al siguiente `.then(fn)` .then(console.log);