Я пытался понять, как реализованы события 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², либо всегда success3. Или, другими словами, события будут обрабатываться детерминистическим способом.
Итак, верно ли это предположение (что события обрабатываются детерминистически)? Предоставляет ли Adobe какую-либо окончательную документацию по этому вопросу?
Примечание: я только здесь связан с событиями, отправляемыми dispatchEvent
- я понимаю, что "отправляемые извне" события (сетевой трафик, ввод пользователя, тиканье таймеров и т. Д.) Ведут себя по-разному.
*: за исключением, конечно, событий, вызванных недетерминированными вещами, такими как ввод данных пользователем или сетевой трафик.
²: он всегда будет терпеть неудачу, если, например, если алгоритм обработки событий был: «помещать новые события в стек, затем непрерывно извлекать верхнее событие из стека, выполнять его до его завершения, а затем переходить к следующему событию» .
³: всегда было бы успешно, если бы события, отправленные dispatchEvent
, обрабатывались, как только они были отправлены.