2010-05-13 63 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