相关疑难解决方法(0)

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);
Run Code Online (Sandbox Code Playgroud)

如果ActionScript是多线程的,那么第4行的断言有时可能会失败并成功.

但由于AS是不是多线程的,它按理说,断言要么总是 fail²或总是 succeed³.或者,换句话说,事件将以确定的方式处理.

那么,这个假设(确定性地处理事件)是否正确?Adobe是否就此事提供了任何明确的文件?

注意:我关注发送的事件dispatchEvent- 我意识到"外部调度"事件(网络流量,用户输入,定时器滴答等)表现不同.


*:当然,例外情况是由用户输入或网络流量等非确定性事件触发的事件.
²:例如,如果事件处理算法是:"将新事件推送到堆栈,然后不断地从堆栈中弹出顶级事件,执行它直到它终止,然后继续下一个事件",它总是会失败.
³:如果发送的事件在发送后dispatchEvent立即处理,它总是会成功.

apache-flex events actionscript flex3 actionscript-3

3
推荐指数
1
解决办法
2529
查看次数