2010-05-13 65 views
0

我需要在使用另一个函数捕获事件(下载内容)后返回到原始函数。原始函数需要返回一个值,这取决于下载的数据。所以,我想暂停原始函数的下载所需的时间和eventhandler函数来完成它的工作,并在之后恢复。Actionscript:从事件处理函数切换回前一个函数

显而易见的方法是设置一个标志值(原始函数和事件处理程序都在同一个类中),并使原始函数检查它,直到事件处理函数更改该标志。但那样会浪费,而且我的AS已经够慢了:) [应用程序的其他部分使用了一些沉重的图形]。

还有别的办法吗?就像一个被捕获的函数“中间”一样?或者其他形式的流量控制?

回答

0

它不喜欢这个工作。您不能让代码坐在那里等待其他事情完成,Actionscript执行只是单线程。您需要按照jdeseno的建议进行操作,将其分解为多个功能。

+0

这是我明确的答案,虽然没有一个我希望:)。已经做了分裂,它是一个更多的编码(新的事件子类和一些依赖关系的变化),但它的作品。仍然习惯AS3。感谢你和j.deseno。 – 2010-05-17 21:08:07

2

你需要拆分在等待事件处理成恢复你的代码的其余部分的回调后,你的事件触发的功能:

public function non_blocking():void { 
    // code that needs to run before the event here] 

    var callback:Function = function(e:Event):void { 
     // test return type here 
     // ... continue with the rest of your code 
    }; 

    addEventListener(YOUR_EVENT_TYPE, callback); 
} 
+0

问题是,我需要non_blocking()函数来返回一些东西,这取决于回调。 non_blocking是对象的外部接口的一部分,调用它的其他类需要返回来知道该对象是否有效(它是在构造函数之后调用的一种加载函数,如果它返回true,如果外部调用的函数终止,那么回调没有(我知道的)方法来与外部类进行通信,而不是启动另一个事件,但那会破坏我的设计。 – 2010-05-14 00:30:55

+0

另一方面,启动另一个事件是URLLoader如何工作,它确实工作:)。也许变化不会那么激烈...... 同时,还有另一种方式吗? – 2010-05-14 00:37:57

+0

听起来像你需要传递你的调用函数的延续,而不是(或在里面)调用我的示例中的回调函数。当事件结束时,您需要一些延迟执行和恢复的机制。 – jdeseno 2010-05-14 03:06:22