Я пытался понять, как реализованы события ActionScript, но я застрял.Порядок выполнения обработчика события ActionScript
Я знаю, что AS является однопоточным, что означает, что за один раз будет выполняться только один обработчик событий, а также означает, что обработчики будут выполняться в детерминированном порядке *.
Например, рассмотрим следующий код:
1: var x = {executed: false};
2: foo.addEventListener("execute", function(){ x.executed = true; });
3: foo.dispatchEvent(new Event("execute"));
4: assert(x.executed);
Если ActionScript был многопоточный, можно было бы, что утверждение на линии 4 может не иногда и успеха других.
Но поскольку AS не многопоточный, само собой разумеется, что утверждение будет либо всегда fail² или всегда succeed³. Или, другими словами, события будут решаться детерминированным образом.
Итак, это предположение (что дело займется детерминированным делом) правильно? Предоставляет ли Adobe какую-либо окончательную документацию по этому вопросу?
Примечания: Я только здесь дело с событиями, отправляемых dispatchEvent
- Я понимаю, что «внешне посланный» событие (сетевой трафик, пользовательский ввод, таймеры тикают, и т.д.) ведет себя по-разному.
*: за исключением, конечно, для событий, вызванных недетерминированными вещи, как пользовательский ввод или сетевого трафика.
²: он всегда терпит неудачу, если, например, если алгоритм обработки событий был следующим: «вставляйте новые события в стек, затем непрерывно выпадаете верхнее событие из стека, выполняйте его до тех пор, пока оно не завершится, а затем перейдите к следующему мероприятие".
³: всегда было бы успешным, если бы события, отправленные dispatchEvent
, были обработаны, как только они были отправлены.
Спасибо за ответ. Я подозревал это, но я не знал, я хочу доверять своей интуиции без какого-либо подтверждения. –