我如何监听功能完成?
假设我有 processFile 函数,它在Class Constructor中使用另一个事件侦听器触发。
private function processFile(e:event):void
{
//do whatever is this function suppose to do
}
现在我想列出完成情况
当我使用
时processFile.addEventListener(Event.Complete, anotherCoolFunction);
我得到一个错误
错误:1061通过stati类型函数
可能未定义方法AddEventListener
答案 0 :(得分:3)
呀......不:)
您只能侦听实现IEventDispatcher接口的对象上的事件,例如Sprite或MovieClip或EventDispatcher。
虽然您可以使用几种解决方案,但只需在调用processFile后调用下一个函数即可。当你调用一个函数时,下一行不会执行,直到它完成。所以在以下场景中:
processFile();
anotherCoolFunction();
在processFile完成之前,您可以确定anotherCoolFunction永远不会执行。
希望有所帮助。
泰勒。
答案 1 :(得分:3)
class SomeClass
{
public function SomeClass()
{
this.addEventListener("fileProcessComplete", anotherCoolFunction);
processFile();
}
private function processFile():void
{
//do whatever is this function suppose to do
dispatchEvent(new Event("fileProcessComplete"));
}
private function anotherCoolFunction(evt:Event):void
{
//do whatever is this function suppose to do
}
}
答案 2 :(得分:1)
使用addEventListener无法实现您的目标。函数不是EventDispatcher类的子类(提供addEventListener方法的基类)。
我没有理解你为什么要做这样的事情。如果你有一个函数并且你想知道它何时完成执行,只需在调用processFile()之后直接放置anotherCoolFunction()。
如果调用processFile()作为对事件侦听器的回调,只需将调用放在processFile()的最后一行中的anotherCoolFunction()。
答案 3 :(得分:1)
函数进程是同步的,因此函数的最后一行表示它已完成。你可以直接调用另一个函数,或者做一个dispatchEvent()(你需要扩展EventDispatcher,这就是你得到错误的原因;))。
答案 4 :(得分:1)
杰里米方法是正确的方法.. 如果你不想使用'听众'
,你也可以这样做class SomeClass
{
public function SomeClass() {
var obj = this;
this.processFile(function(){
obj.anotherCoolFunction(this);
});
}
private function processFile(method:Function):void
{
//do whatever is this function suppose to do
method.apply({some_var_name: 'hello'});
}
private function anotherCoolFunction(data):void
{
//do whatever is this function suppose to do
trace(data.some_var_name) // => 'hello'
}
}
答案 5 :(得分:0)
我会监听函数最后一行的dispatchEvent(),因此您需要在扩展Sprite或MovieClip中创建类。在处理事件时,功能将完成。如果你从processFile函数调用另一个函数,那么它将不会完成,因为它仍然在调用堆栈上。