Ich habe versucht zu verstehen, wie die ActionScript-Ereignisse implementiert werden, aber ich stecke fest.Ausführungsreihenfolge der ActionScript-Ereignishandler
Ich weiß, dass AS single-threaded ist, was bedeutet, dass nur ein Event-Handler gleichzeitig ausgeführt wird, und bedeutet auch, dass Handler in einer deterministischen Reihenfolge * ausgeführt werden.
Betrachten wir zum Beispiel den folgenden Code:
1: var x = {executed: false};
2: foo.addEventListener("execute", function(){ x.executed = true; });
3: foo.dispatchEvent(new Event("execute"));
4: assert(x.executed);
Wenn Actionscript-Multi-Threaded war, wäre es möglich, dass die Behauptung der Linie 4 manchmal scheitern könnte und andere Erfolg haben.
Aber da AS nicht multi-threaded ist, steht, dass die Behauptung wird entweder immer fail² oder immer succeed³ zur Vernunft. Mit anderen Worten: Ereignisse werden deterministisch behandelt.
Also, ist diese Annahme (dass Ereignisse Hasen deterministisch behandelt) korrekt? Bietet Adobe eine definitive Dokumentation zu diesem Thema?
Hinweis: Ich bin nur hier mit Ereignissen von dispatchEvent
versandt betroffen - Ich stelle fest, dass „extern eingeplant“ Ereignisse (Netzwerkverkehr, Benutzereingabe, Timer tickt, usw.) verhalten sich anders.
*: mit Ausnahme, natürlich, für durch nichtdeterministische Dinge wie Benutzereingaben oder Netzwerkverkehr ausgelösten Ereignisse.
²: Es würde immer fehlschlagen, wenn zum Beispiel der Algorithmus für die Ereignisbehandlung wie folgt lautet: "Schiebe neue Ereignisse auf einen Stapel, öffne dann das oberste Ereignis kontinuierlich vom Stapel, führe es bis zum Ende aus und gehe dann zum nächsten Veranstaltung".
³: es würde immer gelingen, wenn Ereignisse, die von dispatchEvent
gesendet wurden, behandelt wurden, sobald sie versandt wurden.
Danke für die Antwort. Ich hatte das vermutet, aber ich habe nicht Ich möchte meiner Intuition ohne irgendeine Bestätigung vertrauen. –