Algo muy simple pero que nos genera muchas veces confusión, más que nada cuando estamos empezando esto de la programación, es entender que es una función callback, llamado normalmente solo callback. Lo importante es tener en mente que es una función y la pasamos (o recibimos) como parámetro a otra.
En JavaScript las utilizamos muy a menudo, quizás sin darnos cuenta, algunos ejemplos son:
Quizás en un primer momento no lo notamos, pero el parámetro que le estamos pasando a map es una función, nuestro callback. Para verlo mejor lo vamos a extraer:
En este ejemplo lo vemos más claro, pero nuevamente podemos separar la función para tenerlo más claro:
Los callbacks nos sirven tanto para funciones síncronas como asíncronas, esto es útil, por ejemplo, cuando hacemos una solicitud a una API:
En este ejemplo estamos manejando errores con callback. Si todo funciona correctamente, este argumento se pasa como null
, y el segundo argumento contiene el resultado de la operación. En caso de error, el primer argumento contendrá un objeto Error, y el segundo argumento será null
.
También encontraremos utilidad al guardar algo en el localStorage, o en la base de datos, si estamos en el backend.
En React donde utilizamos mucho un callback es con useEffect, del qué ya escribimos un artículo anteriormente, les dejo el link.
Para esto les traigo un caso real, con el que me encontré más de una vez. El equipo de diseño ha creado un lottie para un spinner mientras el usuario inicia sesión, pero hay un problema, nuestra aplicación es demasiado rápida y no se aprecia la animación.
Para lo que tendremos que agregar una demora entre la carga de la animación y la redirección al home. Nuestro código tiene una forma similar a esta:
Lo que haremos es crear una función. que se llame waitAndDo
que recibirá la cantidad de segundos que desea esperar y la función callback. De esta forma podremos controlar el tiempo de espera para que la animación ocurra antes de navegar.
En conclusión, los callback nos ayudan a manejar el flujo y podemos controlar salidas de operaciones asícronas, pero debemos tener mucho cuidado con una práctica llamada Callback Hell, que sucede al anidar varias de estás funciones callback, para esos casos existen las Promesas y el uso de async/await que facilitan la escritura (y lectura) de código asíncrono.
Nos damos cuenta cuando caímos en callback hell por que nuestro código se mira algo así:
Este ejemplo está generado por chat gpt, de openai.
Para seguir profundizando en el tema, te invito a revisar la documentación oficial de Mozilla Developer Network (MDN)