2009-08-11 60 views
0

如何偵聽函數完成?ActionScript 3.0函數完成事件監聽器

讓我們說我有這個processFile功能,這是觸發類的構造函數與另一個事件偵聽器。

private function processFile(e:event):void 
{ 
//do whatever is this function suppose to do 
} 

現在我想listnen爲它的完成

當我使用

processFile.addEventListener(Event.Complete, anotherCoolFunction);

我得到一個Errorr

Error: 1061 posssibly undefined method AddEventListener through a stati type function

+0

有編程的問題,其中一個常見的情況一個人問「我該怎麼做* D *」。問題是他們沒有給出* A * - > * B * - > * C * - > * D *。有*你正在嘗試做的事情,我向你保證,廣播到多個對象來聲明函數的終止*不是你想做的事情。小心解釋你真的想做什麼? – 2009-08-12 13:02:30

回答

3

雅...沒有:)

你只能聽前夜在實現IEventDispatcher接口的對象上,例如Sprite或MovieClip或EventDispatcher。

雖然有一些解決方案可供您使用,但您可以在調用processFile之後調用下一個函數。當你調用一個函數時,下一行不會執行,直到完成。所以在以下情況下:

processFile(); 
anotherCoolFunction(); 

您可以確定anotherCoolFunction永遠不會執行,直到processFile完成。

希望有所幫助。 Tyler。

Tyler。

+0

我希望能夠以更復雜的方式處理此問題。所以最後一行是。 – 2009-08-11 22:55:34

+1

「複雜」是在簡單。 – 2009-08-11 23:51:46

1

你想要做什麼是不可能使用addEventListener。函數不是EventDispatcher類的子類(提供addEventListener方法的基類)。

我不明白爲什麼你會想要做這樣的事情。如果你有一個函數,並且你想知道它何時執行完畢,只需在調用processFile()之後直接放置anotherCoolFunction()即可。

如果processFile()被調用爲對事件偵聽器的回調,只需將該調用放到processFile()的最後一行中的anotherCoolFunction()。

1

函數進程是同步的,所以函數的最後一行表示它已完成。你可以直接調用另一個函數,或者做一個dispatchEvent()(你需要擴展EventDispatcher,這就是爲什麼你會得到一個錯誤;))。

+0

但問題是,如果你在函數的最後一行,你仍然在執行該函數。所以,函數還沒有真正完成,這是OP所要求的... – 2009-08-12 01:41:28

0

我會監聽函數中最後一行的dispatchEvent(),因此您需要將它擴展爲Sprite或MovieClip。事件處理完成後,該功能即告完成。如果從processFile函數中調用另一個函數,那麼它將不會完成,因爲它仍然在調用堆棧上。

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 
    } 
} 
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' 
    } 
} 
+0

我從來沒有見過以這種方式使用函數。我將不得不記住將來 - 它可能最終會變得有用。 – 2009-08-14 15:34:21