Tengo dos promesas ejecutándose al final del código principal, pero una se ejecuta en el catch usando una función de flecha y la otra se ejecuta directamente, ¿sabes la diferencia entre una y otra?
const main = async () => { const promisseTeste1 = () => new Promise((resolve, reject) => { reject("ERRO") }); const promisseTeste2 = () => new Promise((resolve, reject) => { promisseTeste1().then().catch(reject) }); // Method 1 promisseTeste2().then().catch(console.log) // Method 2 promisseTeste2().then().catch(e => console.log(e)) } main()Quería saber si hay algún problema de rendimiento o incluso un posible problema que pueda ocurrir con el método 1.
Si está utilizando console.log , entonces en cualquier navegador que no esté completamente obsoleto, no habrá ningún problema.
En algunos navegadores muy antiguos, llamar a console.log con algo que no sea un contexto de llamada de console era un problema, pero muchos considerarían que esto no es algo por lo que valga la pena preocuparse.
Para el caso general de pasar una función ya declarada en lugar de crear una función en línea anónima, un problema potencial es (similar al anterior) this valor dentro de la devolución de llamada si se pasa/llama a un método de objeto. El valor this será el objeto cuando se invoque en línea, y globalThis (o undefined en modo estricto) si se pasa directamente.
const obj = { prop: 'val', method() { console.log(this.prop); } }; const main = async () => { // Method 1 Promise.reject().then().catch(obj.method) // Method 2 Promise.reject().then().catch(e => obj.method(e)) } main()Aunque no está relacionado con el núcleo de su pregunta, como puede ver en el fragmento anterior, he evitado el antipatrón de construcción Promise explícito y le recomiendo que haga lo mismo.
si hay algún problema de rendimiento
No remotamente. A menos que esté en un ciclo cerrado o esté realizando múltiples manipulaciones DOM, es casi seguro que ni siquiera vale la pena considerar el rendimiento de un segmento de código; es mejor centrarse en la legibilidad y el mantenimiento del código.
Para el problema aún más general de hacer .method(callback) en lugar de .method(value => callback(value)) , tenga cuidado con las funciones cuyo comportamiento cambia según la cantidad de argumentos que se pasan (razón por la cual .map(parseInt) no funciona ) Afortunadamente, esto no es un problema con .then y .catch , porque solo pasan un argumento a la devolución de llamada.