2015-07-04 11 views
5

ich dies zu lesen:Javascript-Ereignisschleife. Klärungsbedarf

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

Es gibt dieses Zitat:

„der einzige Thread der Ausführung der Laufzeit fragt einen Betrieb und bietet eine Callback-Funktion und dann Bewegungen auszuführen zu tun etwas anderes.Wenn der Vorgang abgeschlossen wurde, ist eine Nachricht in die Warteschlange eingereiht zusammen mit der zur Verfügung gestellten Callback-Funktion.An einem bestimmten Punkt in der Zukunft, die Nachricht wird aus der Warteschlange und der Rückruf wurde ausgelöst. "

So ein Beispiel dafür, was in meinem Kopf ist hier los ist dies:

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

Fragen:
1) someAjaxCall der richtige Betrieb ist und callbackcode ist der Rückruf?
2) Also im Grunde, wenn einAjaxCall aufgerufen wird, wird eine Nachricht in die Warteschlange eingereiht, die auf die Callbackfunktion zeigt richtig? Nachdem console.log ("y") aufgerufen wurde oder wenn der Stack geleert wurde, wird die Nachricht aus der Warteschlange entfernt und der Callback/Callbackcode wird ausgelöst.

Dann gibt es dieses Zitat:

„Die Entkopplung des Anrufers aus der Antwort ermöglicht den JavaScript Runtime andere Dinge zu tun, während für Ihren asynchronen Betrieb warten zu vervollständigen und ihre Rückrufe zu schießen.“

3) Was ist die Laufzeit? Was bedeutet das? Ich nehme nur an, dass der Callstack die Ausführung fortsetzen kann und wenn er leer ist ... können die Nachrichten dann aus der Warteschlange entfernt werden?

+0

Die Antwort auf diese Frage [Wie behandelt JavaScript AJAX-Antworten im Hintergrund?] (Http://stackoverflow.com/questions/7575589/how-does-javascript-handle-ajax-responses-in-the-background/7575649 # 7575649) beantwortet wahrscheinlich das meiste von dem, was Sie fragen. Diese Frage ist vielleicht sogar eine kleine Wiederholung. – jfriend00

Antwort

0

Javascript Laufzeit ist die Software, die den gesamten Javascript-Code ausführt. Dies bedeutet, dass Javascript zwar auf eine Antwort auf den AJAX-Aufruf wartet, aber andere Dinge ausführen kann. Zum Beispiel können Sie "Bitte warten ..." mit einem Drehfeld anzeigen, während Sie darauf warten, dass der Server eine lange Datenbankabfrage durchführt. Wenn die Antwort empfangen wird, wird der Rückruf ausgeführt, und der Spinner kann gestoppt und die Daten angezeigt werden.

0

Denken Sie an die JavaScript-Engine als so etwas wie dies hinter den Kulissen suchen:

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

An einem gewissen Punkt, Ihr Code ausgeführt wird. Sie console.log("x"), führen Sie die someAjaxCall-Funktion, und führen Sie dann console.log("y"). Intern ändert someAjaxCall wahrscheinlich einige Zustände, die Sie nicht sehen können, sagt dem Browser "hey, wenn Sie zu updateUIAndDoNetworkingStuffAndWaitForIncomingEvent, als Teil Ihrer 'tun Netzwerk-Sachen', auch diese HTTP-Anfrage, und wenn Sie fertig sind, schießen ein Ereignis". Als Teil dieses Datensatzes speichert es Ihre Rückruffunktion. Dann, einige Male später durch die Schleife, sieht updateUIAndDoNetworkingStuffAndWaitForIncomingEvent, dass die HTTP-Anfrage oder was auch immer abgeschlossen hat, und es gibt ein Ereignis zurück, das sagt: "Hey, diese HTTP-Anfrage hast du mich vor einer Weile gefragt - nun, es ist fertig!" Der Code Danach bemerkt es, dass es einen Callback gab und es aufgerufen wurde, und Ihr Code setzt die Ausführung innerhalb des Callbacks fort, den Sie an someAjaxCall übergeben haben.