Action Script 3如何处理异步回调?

时间:2011-07-11 12:30:05

标签: flash actionscript-3 asynchronous garbage-collection

我的游戏中有一段代码看起来很像这样:

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

基本上,执行createGameRoom,一旦成功,我运行的函数就会运行。

但是我最近遇到了一些奇怪的错误,我想知道,是“new Object();”的实例。每次运行回调函数时都一样吗?

每次都需要是一个不同的,新鲜的Object实例,但是我遇到了一些垃圾收集问题,这让我觉得每次触发事件回调都会传递相同的对象,

任何人都知道Flash如何处理这个问题?

2 个答案:

答案 0 :(得分: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]);

        }
    }
}

答案 1 :(得分:0)

在您给出的示例中编写AS3代码(在调用其他方法时定义新函数),就像在JavaScript中一样,您会发现调试非常困难。

我建议使用Hall / Wan查看“OOP with ActionScript”,并利用面向对象的编程设计原则,因为它可以让您的生活更长远:

http://www.amazon.com/Object-Oriented-Programming-ActionScript-Branden-Hall/dp/0735711836