Questo esempio è JavaScript, poiché è dove utilizzo principalmente i callback. Voglio capire come funzionano a un livello basso.I callback sono sempre asincroni?
Nell'esempio seguente, mi aspetto che tutto avvenga in ordine e che "richiami" si verifichi dopo "passaggio 3" e prima di "passaggio 4". Questo ha senso per me, dato che tutto è fatto in ordine su un singolo thread di esecuzione. Non ci sono inganni. L'unica cosa che è speciale è che hai passato una funzione a un'altra funzione.
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!");
}
Come si dovrebbe fare doSomething
asincrona in modo che "il passo 4" può essere eseguita prima o in parallelo con, "il punto 3"?
Suppongo che se lo doSomething
fosse in qualche modo chiamato in modo asincrono, dovrebbe essere su un thread diffferente, no? E se sì, quando finisce e quindi chiama myCallBack
, la richiamata avviene sul secondo thread o sul thread principale? Se accade sul thread principale, perché il secondo thread ha bisogno anche di un puntatore alla funzione di callback? Come funziona la chiamata inter-thread?
Presumo che * non * sia in esecuzione in un browser, giusto? Perché nel browser, qualsiasi chiamata AJAX è necessariamente asincrona ... –
@Dean, prima di tutto le richieste XHR possono essere sincrone (a seconda dei parametri della richiesta). In secondo luogo, se leggi la domanda (e guarda il suo codice di esempio), non si tratta di Ajax. – eyelidlessness
@Dean potrebbe essere in esecuzione in un browser o meno. Sono più interessato a capire se la funzione di callback viene eseguita sul thread principale o il secondo thread che ha passato il puntatore della funzione di callback come parametro. –