(genauer gesagt, ich bin mit Backbone Modell Ereignissen)Blockieren JavaScript-Ereignishandler?
Kann mir jemand helfen zu verstehen, wie JavaScript-Ereignisse arbeiten? Das Folgende ist nicht die Art und Weise arbeiten ich erwartet hatte und es hat mich verwirrt:
In Rückgrat, mache ich eine Änderung an meinem Modell, und unmittelbar danach laufe ich einige Code:
var myVar;
myModel.set('someAttr', true); // Change my model
myVar = executeSomeFunc(); // Now run some code
Dann woanders in meinem Codebasis ich für die Veranstaltung zu hören und zu handhaben es (in meinem Fall habe ich dieses Modell mit einer Sammlung bin Verpackung):
myCollection.on('change:someAttr', changeHandler); // Listen for the event
Was ich finde, ist, dass myVar = executeSomeFunc()
nicht, bis alle Event-Handler auf dem change:someAttr
Ereignis ausgeführt wird sind getan Brennen. (Ich habe überprüft, indem ich einen zeitaufwendigen Event-Handler an das Ereignis angehängt habe)
Ist dieses erwartete Verhalten?
Mein Verständnis war, dass der Event-Handler synchron mit dem "Trigger" läuft, aber dass Sie normale Semantik innerhalb der Event-Handler-Funktion bekommen - dh - es könnte einen anderen wartenden Event-Handler an Funktions-Aufruf Grenzen - sagen, Funktion ruft innerhalb Ihres Event-Handlers auf. Ist das falsch? –
Wow ... ich weiß nicht warum, aber das ist nur total durch mich für eine Kurve ... Ich habe immer angenommen, dass dieses Zeug nicht blockierend war! Danke für die Lektion in js 101 – uglymunky
jQuery, mindestens, legt fest, dass Handler in der Reihenfolge ausgeführt werden, in der sie gebunden sind. Das würde bedeuten, dass es kein Nachgeben gibt. Es ist mein Verständnis, dass grundlegende Javascript funktioniert auch so - Bindung Ereignisse ist im Wesentlichen nur eine Warteschlange von Methoden, die nacheinander ausgeführt werden. Es gibt wirklich kein Konzept des Nachgebens. – bhamlin