Este ejemplo es JavaScript, ya que es donde estoy usando devoluciones de llamada en su mayoría. Quiero entender cómo funcionan en un nivel bajo.¿Las devoluciones de llamada son siempre asincrónicas?
En el ejemplo siguiente, esperaría que todo sucediera en orden y que "volviera a llamar" después del "paso 3" y antes del "paso 4". Esto tiene sentido para mí, ya que todo se hace en orden en un único hilo de ejecución. No hay engaño. Lo único que es especial es que pasaste una función a otra función.
function main() {
console.log("step 1");
console.log("step 2");
doSomething(myCallBack);
console.log("step 4");
}
function doSomething(f) {
accessTheDatabase(); // this could take a while
console.log("step 3");
f(); // done - now call back
}
function myCallBack() {
console.log("calling back!");
}
¿Cómo hacer doSomething
asíncrona para que "paso 4" puede ejecutarse antes, o en paralelo con el "paso 3"?
Supongo que si de alguna manera se llamara doSomething
de forma asíncrona, tendría que estar en un hilo diferente, ¿no? Y si es así, cuando termina y luego llama a myCallBack
, ¿la devolución de llamada ocurre en el segundo hilo o en el hilo principal? Si sucede en el hilo principal, ¿por qué el segundo hilo incluso necesita un puntero a la función de devolución de llamada? ¿Cómo funciona la llamada entre hilos?
Supongo que esto * no * se está ejecutando en un navegador, ¿verdad? Porque en el navegador, cualquier llamada AJAX es necesariamente asíncrona ... –
@Dean, en primer lugar, las solicitudes XHR pueden ser sincrónicas (dependiendo de los parámetros de solicitud). En segundo lugar, si lees la pregunta (y miras su código de ejemplo), no se trata de Ajax. – eyelidlessness
@Dean podría estar ejecutándose en un navegador o no. Estoy más interesado en averiguar si la función de devolución de llamada se ejecuta en el subproceso principal o en el segundo subproceso que pasó el puntero de función de devolución de llamada como parámetro. –