2015-07-04 15 views
5

sto leggendo questo:ciclo di eventi Javascript. Chiarificazione necessaria

http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/

C'è questa citazione:

"singolo thread di esecuzione chiede al runtime per eseguire un'operazione , fornendo una funzione di richiamata e poi si sposta on Al termine dell'operazione, un messaggio è accodato insieme alla funzione di richiamata fornita. il callback ha sparato. "

Così un esempio di quello che sta succedendo qui nella mia mente è questo:

console.log("x") 
someAjaxCall(function({ 
callbackcode 
}) 
console.log("y") 

Domande:
1) someAjaxCall è il giusto funzionamento e callbackcode è il callback?
2) Quindi, in pratica, quando viene chiamato unAjaxCall, viene accodato un messaggio che punta correttamente alla funzione callback? Dopo che viene chiamato console.log ("y") o quando viene svuotato lo stack, il messaggio viene rimosso dalla coda e viene attivato il callback/callbackcode?

Poi c'è questa citazione:

"Il disaccoppiamento del chiamante dalla risposta consente la JavaScript runtime di fare altre cose mentre aspettate il vostro operazione asincrona per completare e le loro callback al fuoco."

3) Che cos'è il runtime? Cosa significa? Prendo solo per significare che il callstack può riprendere l'esecuzione e quando si svuota ... i messaggi possono quindi deselezionare?

+0

La risposta a questa domanda [In che modo JavaScript gestisce le risposte AJAX in background?] (Http://stackoverflow.com/questions/7575589/how-does-javascript-handle-ajax-responses-in-the-background/7575649 # 7575649) probabilmente risponde alla maggior parte di ciò che stai chiedendo. Questa domanda è forse anche un doppio di quella. – jfriend00

risposta

0

runtime Javascript è il software che esegue tutto il codice Javascript. Ciò significa che mentre Javascript è in attesa di una risposta alla chiamata AJAX, può eseguire altre operazioni. Ad esempio, è possibile visualizzare "Please wait ..." con uno spinner in attesa che il server esegua una lunga query del database. Quando viene ricevuta la risposta, la richiamata verrà eseguita e può interrompere la selezione e visualizzare i dati.

0

Pensate al motore JavaScript come guardare qualcosa di simile dietro le quinte:

while(true) { 
    var event = updateUIAndDoNetworkingStuffAndWaitForIncomingEvent(); 
    if(event.hasJavaScriptHandler) { 
     event.runJavaScriptHandlerForEvent(); 
    } 
} 

Ad un certo punto, il codice viene eseguito. Si console.log("x"), eseguire la funzione someAjaxCall e quindi eseguire console.log("y"). Internamente, someAjaxCall sta probabilmente modificando uno stato che non puoi vedere che dice al browser "hey, quando arrivi a updateUIAndDoNetworkingStuffAndWaitForIncomingEvent, come parte del tuo 'fare roba di rete', fai anche questa richiesta HTTP, e quando hai finito, fai fuoco un evento". Come parte di quel record, memorizza la tua funzione di callback. Quindi, alcune volte dopo il ciclo, updateUIAndDoNetworkingStuffAndWaitForIncomingEvent vede che la richiesta HTTP o qualsiasi cosa è stata completata e restituisce un evento che dice "hey, quella richiesta HTTP che mi hai chiesto di fare qualche tempo fa, beh, è ​​finita!" Il codice seguito, si accorge che c'è stata una richiamata che è stata archiviata e la chiama e il codice riprende l'esecuzione all'interno della richiamata passata a someAjaxCall.