Error First Callbacks
Clase 28 de 31 • Curso de Fundamentos de Node.js
Contenido del curso
Clase 28 de 31 • Curso de Fundamentos de Node.js
Contenido del curso
David Valecillo
Reinaldo Mendoza
María Sierra
Mauricio Gonzalez Falcon
Cristobal Vega
Omar Gabriel Aguilar Moscoso
Andres Ramirez Restrepo
Reynaldo Francisco Moreno Briceño
Carlos Enrique Ramírez Flores
Camilo Alexander Velandia Velandia
Wilson Fernando Antury Torres
Eduardo Rodriguez
Manuel Alejandro Muñoz Mendivil
David Santiago Hurtado Betancourt
Lizardo Reyes
Dilan Santiago Ariza Cañon
Jimmy Buriticá Londoño
Mauricio Gonzalez Falcon
Alexander Nova Arevalo
Alexis Bustamante
Cristian Florez
Santiago Bastidas Rodríguez
Abigail Perez
Max Andy Diaz Neyra
Ariel Ezequiel Biazzo Genua
Maria Elizabeth Minero Alvarenga
Carlos Nassif Trejo Garcia
Carlos Santaniello
Nayru Alexandra Ramirez Molano
Antonio Mendiola Farías
Ian Vassallo
Johan Echeverri
Lanzar una excepcion con Throw dentro de un callback asincrono no va a funcionar.. Solo nos va a funcionar en n bloque de codigo sincrono
Recuerdo que en su momento el profesor fue muy enfático en ello, porque al ser asyncrono sale del main thread
Error First Callbacks
Un patrón que se sigue siempre en cualquier lenguaje y programa de devs es Error First Callbacks, esto quiere decir que siempre que tengamos un callback el primer parámetro debería ser el error.
😭 Esto se usa por la convención de que todo puede fallar.
Otro patrón típico es tener el callback es tener en el callback como la última función que se pasa. Aunque depende del caso.
function asincrona(callback) { setTimeout(() => { try { let a = 3 + w callback(null, a) } catch (error) { callback(error) } }, 1000) } asincrona((err, dato) => { if (err) { console.error('Tenemos un error') console.error(err) return false // throw err } console.log(`Todo ha ido bien, mi dato es ${dato}`) })
Gracias por tu resumen!
Si el V8 es el corazón de Nodejs, los callbacks son sus venas. :green_heart:
wenaaa
Los Error First Callbacks se utilizan para pasar primero el error y los datos posteriormente. Entonces, puedes verificar el primer argumento, es decir, el objeto de error para ver si algo salió mal y puedes manejarlo. En caso de que no haya ningún error, puedes utilizar los argumentos posteriores y seguir adelante.
fs.readFile('/text.txt', function(err, data) { if (err) { console.log(err); } else { console.log(data); } });
Tmabien podemos usar el operador ternario de la siguiente manera para que quede mas bonito y legible:
fs.readFile('/text.txt', (err, data) => { (err) ? console.error('Hubo un error', err.message) : console.log('Todo ok, tu info es:', data) }
esta medio confuso esto, pero creo que es cuestión de ponerlo en práctica!
los throw no funcionan con callbacks asincronos
Información complementaria: https://nodejs.org/api/errors.html#errors_error_first_callbacks
gracias por aporte, muy interesante y complementa bastante bien la clase
¿por qué no seguir el modelo de una promesa resolve/reject?
Tengo la misma pregunta
Es que esto se creo antes que salieran las promesas, entonces es por eso su uso. Ahora ya seria mejor con promesas y async - await, pero para los de la vieja escuela siempre estara esto en su mente.
Gracias por tus imágenes en cada clase.
Gracias por las fotos del código!
Siempreee el error es lo primero que se evalua
function asincrona() { setTimeout(function () { try { let a =3+z; callback(null,a); } catch (error) { callback(error); } },1000); } asincrona(function (error,dato) { if(error){ console.error('tenemos un error'); console.error(error); return false; } console.log('todo ha ido bien',data); })```
aqui se te paso pasar el callback como parametro. Igual gracias por el aporte
Error First Callback
Con el pensamiento de que todo en algún momento puede fallar, una convención que se ha generado es poner como primer parámetro el error en todos los módulos que vaya a generar.
function asyncFunction(callback) { setTimeout(() => { try { let a = 3 + z callback(null, a) } catch (e) { callback(e, null) } }, 1000) }
En este momento hay una función asíncrona, que tiene como parámetro un Callback, y esta generando un error debido a que la variable z no esta definida. Para agarrar el error se puede hacer el Error First Callback.
asyncFunction((err, data) => { if (err) { console.error('Tenemos un error') console.error(err) return false } console.log(`Todo va bien, la data es ${data}`) })
El primer parámetro que recibe el Callback es el error para seguir la convención que se utiliza últimamente.
Este patrón se debe seguir cuando se trabaje con funciones asíncronas.
En este caso lanzar un error mediante throw no va a funcionar debido a que se esta manejando funciones asíncronas y estás son manejadas por el Callback Queue y el Event Loop.
Links de interés
Callbacks
Callbacks 2
try catch no es util para las funciones asincronas porque no captura el error, ya que esta en otro hilo
No es buena para las funciones asincronas que utilizan el callback. Tengo entendido que al usar promesas y async await entonces try catch si funcionan como deberian.
Ey como estan? retoque un poquitin el codigo para que sea mas entendible como funciona los callbacks en este caso...
function asincrona(callback) { setTimeout(function() { try{ let dato = 3 + z; callback(null,dato); } catch(err) { callback(err); } }, 1000); } //esta seria la funcion callback asincrona(function (err, dato) { if(err) { console.error(err.message); return false; } console.log("todo ha ido bien " + dato); })
Con esto se puede ver como el parametro de "asincrona", empieza a trabajar como llamada a una funcion nueva. Esta genera que segun como funcione el codigo, si no genera error enonces llamo a la funcion callback y le paso como parametro dato, pero si falla entonces llamo a callback y le paso como parametro err.
Los Error First Callbacks se utilizan para pasar primero el error y los datos posteriormente. Entonces, puedes verificar el primer argumento, es decir, el objeto de error para ver si algo salió mal y puedes manejarlo.
function asincrona(callback) { setTimeout(function() { try { let a = 3 + z; callback(null, a) } catch (error) { callback(error); } }, 1000) } asincrona(function(err, dato) { if (err) { console.error('Tenemos un error'); console.error(err); //throw err; // No va a funcionar cuando es asincrona return false; } console.log('Todo ha ido bien, el dato es', dato) })
Pregunta de examen: En un callback, ¿cuál debería ser el primer parámetro?
el error siempre
Error First Callback. Cuando utilizamos un callback, debemos tener en cuenta que todo puede fallar, por lo que el primer parámetro que definamos debe ser el de error.
Hola! Si alguien tiene dudas de cómo lidiar con errores en Js y sabe un poco de english jaja, mire este articulo de como lidiar con errores asyncronos
/* Siempre que tengamos un callback el primer parametro deberia ser el error por que es una convension pensando en que todo puede fallar y debemos ser capaces de controlarlo */ /* throw error para funciones asincronas no va a funcionar */ function asincrona(callback) { setTimeout(function() { try { let a = 3 + z; callback(null, a); } catch (e) { callback(e); } }, 1000) } asincrona(function (err, dato) { if (err) { console.error('Tenemos un error'); console.error(err); return false; } console.log('todo ha ido bien, mi data es', dato); })