Ausführungsreihenfolge des ActionScript-Ereignishandlers

Ich habe versucht zu verstehen, wie ActionScript-Ereignisse implementiert werden, aber ich stecke fest.

Ich weiß, dass AS ein einzelner Thread ist, was bedeutet, dass jeweils nur ein Ereignishandler ausgeführt wird und dass die Handler in einer deterministischen Reihenfolge * ausgeführt werden.

Betrachten Sie beispielsweise den folgenden Code:

<code>1: var x = {executed: false};
2: foo.addEventListener("execute", function(){ x.executed = true; });
3: foo.dispatchEvent(new Event("execute"));
4: assert(x.executed);
</code>

Wenn ActionScript mit mehreren Threads ausgeführt wird, ist es möglich, dass die Zusicherung in Zeile 4 manchmal fehlschlägt und andere erfolgreich sind.

Da AS jedoch kein Multithreading-System ist, kann davon ausgegangen werden, dass dies auch der Fall istimmer fail² oderimmer erfolgreich³. Mit anderen Worten, Ereignisse werden deterministisch behandelt.

Also, ist diese Annahme (dass Ereignisse deterministisch gehandhabt wurden) richtig? Bietet Adobe eine endgültige Dokumentation zu diesem Thema?

Anmerkung: Ich binnur befasst sich hier mit Ereignissen vondispatchEvent - Ich stelle fest, dass sich "extern versendete" Ereignisse (Netzwerkverkehr, Benutzereingaben, Timer-Ticking usw.) unterschiedlich verhalten.

*: mit der Ausnahme natürlich für Ereignisse, die durch nicht deterministische Dinge wie Benutzereingaben oder Netzwerkverkehr ausgelöst werden.
²: Es würde immer scheitern, wenn der Ereignisbehandlungsalgorithmus beispielsweise lauten würde: "Neue Ereignisse auf einen Stapel schieben, dann das oberste Ereignis kontinuierlich vom Stapel entfernen, ausführen, bis es endet, und dann zum nächsten Ereignis übergehen". .
³: Es wäre immer erfolgreich, wenn Ereignisse von ausgelöst würdendispatchEvent wurden behandelt, sobald sie versandt wurden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage