Estoy tratando de entender las funciones de callback.
Hasta donde yo llego, la función principal (la función que recibe la función de callback como parámetro) tiene en su interior código asíncrono (que tarda en ejecutarse) y también código no asíncrono (principalmente el código contenido en la función de callback) que queremos que se ejecute cuando termine el código asíncrono (el que tarda en ejecutarase un tiempo indeterminado).
La explicación para el uso de este esquema parece ser el hecho de que Javascript es asíncrono y no espera a que una tarea se complete y continúa con la siguiente o siguientes líneas de código sin esperar a la finalización de aquella.
Mi pregunta es, si en el hilo principal del código, JS no espera a que termine el código asincrónico (lento), ¿por qué JS espera dentro de la función a que termine la tarea lenta antes de ejecutar la función de callback? No lo entiendo. ¿No debería hacer lo mismo, seguir adelante ejecutando el callback antes de terminar? ¿Por qué JS actúa de modo diferente a como actúa en el hilo prinpipal?
¿Es que hay algo especial dentro de la función que llama al callback? ¿Es que JS no es asíncrono dentro de las funciones?
¿Me estoy perdiendo algo o hay algo que no he entendido correctamente y parto de ideas equivocadas?
Gracias por adelantado. Saludos.