Ordem de execução do manipulador de eventos do ActionScript
Eu tenho tentado entender como os eventos do ActionScript são implementados, mas estou preso.
Eu sei que o AS é single threaded, o que significa que apenas um manipulador de eventos estará executando por vez, e também significa que os manipuladores serão executados em uma ordem determinística *.
Por exemplo, considere o seguinte código:
<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>
Se o ActionScript fosse multiencadeado, seria possível que a asserção na linha 4 falhasse às vezes e sucedesse outras.
Mas como o AS não é multi-threaded, é lógico que a afirmação sejasempre falha² ousempre suceder³. Ou, em outras palavras, os eventos serão tratados de maneira determinística.
Então, essa suposição (que os eventos são tratados de forma determinista) está correta? A Adobe fornece alguma documentação definitiva sobre o assunto?
Nota: eu sousó em causa aqui com eventos despachados pordispatchEvent
- Eu percebo que os eventos "externamente despachados" (tráfego de rede, entrada do usuário, temporizadores, etc.) se comportam de maneira diferente.
*: com a exceção, é claro, de eventos acionados por itens não determinísticos, como entrada do usuário ou tráfego de rede.
²: sempre falharia se, por exemplo, se o algoritmo de manipulação de eventos fosse: "empurre novos eventos para uma pilha, depois elimine continuamente o primeiro evento da pilha, execute-o até que ele termine e vá para o próximo evento" .
³: sempre teria sucesso se os eventos enviados pordispatchEvent
foram manipulados assim que foram despachados.