He estado leyendo mucho en línea tratando de descubrir cómo escribir código JavaScript asincrónico. Una de las técnicas que ha surgido mucho en mi investigación es usar devoluciones de llamada. Si bien entiendo el proceso de cómo escribir y ejecutar una función de devolución de llamada, estoy confundido por qué las devoluciones de llamada parecen hacer que la ejecución de JavaScript sea asíncrona automáticamente. Entonces, mi pregunta es: ¿cómo agregar funciones de devolución de llamada a mi código JavaScript hace que dicho código sea asíncrono automáticamente?
javascript
asynchronous-programming
Zach Dziura
fuente
fuente
Respuestas:
No lo hace. Solo tomar una devolución de llamada o pasar una devolución de llamada no significa que sea asíncrono.
Por ejemplo, la
.forEach
función recibe una devolución de llamada pero es sincrónica.El
setTimeout
toma una devolución de llamada también y es asíncrono.Conectarse a cualquier evento asíncrono en Javascript siempre requiere una devolución de llamada, pero eso no significa que llamar a funciones o pasarlas siempre sea asíncrono.
fuente
El secreto de la "magia" es que los eventos a los que está asignando las devoluciones de llamada son asíncronos. Se implementan "bajo el capó" para encargarse de lo que sea que estén haciendo (como recuperar algo de un servidor remoto) en segundo plano, fuera del entorno limitado de JS. Y luego, una vez que han terminado con su trabajo, le dan al motor JS un mensaje para llamar a un evento. Cuando el motor JS termine con lo que sea que esté haciendo actualmente, llamará a cualquier evento que esté en cola (o espere un nuevo mensaje) y luego su devolución de llamada se invocará "mágicamente" de forma asíncrona.
( NOTA: Esta es una visión general conceptual de muy alto nivel del tema que no entra en detalles, porque diferentes motores JS implementarán las cosas de diferentes maneras. Pero esta es la idea general de cómo funciona).
fuente