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.