2011-07-11 74 views
1

我在比賽的一段代碼,看起來很像是:Action Script 3如何處理異步回調?

MultiplayerAPI.createGameRoom(function(){ successFunction(new Object()); });   

基本上,執行createGameRoom,一經成功,我通過運行該功能。

然而,我最近遇到了一些奇怪的錯誤,我想知道,是「new Object();」的實例。每次回調函數運行時都一樣?

它需要每次對象的不同,新的事例,但我有一些垃圾收集問題,這使得我認爲這是每個事件的回調發射時間的推移同一對象,

任何人有任何想法如何處理這個Flash?

+0

請給我們更多關於對象的代碼和信息,這些信息被傳遞給你的successFunction。 –

+0

我想它基本上是不相關的,因爲閃光燈會實例化一個新的或不會,當然?該對象只是一個顯示對象,成功函數將舊對象與新對象進行交換。 – Toby

回答

1

在您的示例中,您將在定義內調用successFunction方法,而不是代碼執行時。您必須傳遞對該方法的引用,而不是調用它。看看下面的例子。如果使用apply方法,則可以將參數作爲Array傳遞。 *尼古拉斯

函數參考&函數調用

function myFunction(parameter:String):String 
{ 
    return 'hello '+parameter; 
} 

var myFunctionReference:Function = myFunction; 
trace(myFunctionReference); // function Function() {} 

trace(myFunctionReference('world')); // 'hello world' 

var myFunctionReturnValue:String = myFunction('moon'); 
trace(myFunctionReturnValue); // 'hello moon' 

工作實例

package 
{ 
    import flash.display.Sprite; 

    public class MethodTest extends Sprite 
    { 
     public function MethodTest() 
     { 
      trace('MethodTest Constructor'); 
      trace('---'); 
      invoke(successFunction,'first',{id:123,type:'foo'}); 
      trace('---'); 
      invokeByApply(successFunction,'second',{id:456,type:'bar'}); 
     } 

     public function invoke(method:Function,someName:String, someObject:Object):void{ 
      trace('MethodTest invoke'); 
      method(someName,someObject); 
     } 

     public function invokeByApply(method:Function,...arguments):void{ 
      trace('MethodTest invokeByApply'); 
      method.apply(null,arguments); 
     } 

     public function successFunction(someName:String, someObject:Object):void{   
      trace('MethodTest successFunction'); 
      trace('someName: '+someName); 
      for(var key:String in someObject)trace(key+': '+someObject[key]); 

     } 
    } 
}