Kolejność wykonywania obsługi zdarzenia ActionScript

Próbowałem zrozumieć sposób implementacji zdarzeń ActionScript, ale utknąłem.

Wiem, że AS jest pojedynczym wątkiem, co oznacza, że ​​tylko jedna obsługa zdarzeń będzie wykonywana jednocześnie, a także oznacza, że ​​procedury obsługi będą wykonywane w kolejności deterministycznej *.

Na przykład rozważ następujący kod:

<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>

Gdyby ActionScript był wielowątkowy, możliwe byłoby, że asercja w linii 4 mogłaby czasami zawieść i odnieść sukces.

Ale ponieważ AS nie jest wielowątkowy, należy rozumieć, że twierdzenie będzie równieżzawsze fail² lubzawsze sukces³. Innymi słowy, zdarzenia będą obsługiwane w sposób deterministyczny.

Czy więc to założenie (że wydarzenia są traktowane deterministycznie) jest poprawne? Czy Adobe dostarcza ostateczną dokumentację w tej sprawie?

Uwaga: jestemtylko dotyczy to wydarzeń wysyłanych przezdispatchEvent - Zdaję sobie sprawę, że zdarzenia „wysyłane zewnętrznie” (ruch sieciowy, wprowadzanie danych przez użytkownika, tykanie timerów itp.) Zachowują się inaczej.

*: z wyjątkiem oczywiście zdarzeń wyzwalanych przez niedeterministyczne rzeczy, takie jak dane wprowadzane przez użytkownika lub ruch sieciowy.
²: zawsze zawiedzie, jeśli, na przykład, jeśli algorytm obsługi zdarzeń był: „wypychaj nowe zdarzenia na stos, a następnie ciągle zdejmuj najwyższe zdarzenie ze stosu, wykonuj je, aż się zakończy, a następnie przejdź do następnego zdarzenia” .
³: zawsze udałoby się, gdyby zdarzenia zostały wysłane przezdispatchEvent były traktowane tak szybko, jak zostały wysłane.

questionAnswers(2)

yourAnswerToTheQuestion