3

在 Flash AS3 中,我想编写单个try catch块以捕获整个班级中的任何错误。
比如我在myClass.as中有很多函数。我不想在每个函数中编写 try catch 块以捕获此函数中的错误。
有什么方法可以做到这一点吗?

谢谢!

4

3 回答 3

8

你不能!除了 AS3 之外,即使在其他语言中也没有这样简单的方法,除非他们使用 AOP 方法来做到这一点。

最好的做法是让你的类冒泡错误(异常)并让更高层捕获并处理错误。

编辑- 关于评论

实际上这个想法是自然的方式..你仍然需要手动捕捉每一个可能的错误。我给你举个例子。请注意,该示例的目的仅是为了清楚地了解较低层和较高层。

例如,您在中间层(您的业务流程)中有一个类:

public class MyBussiness {
    public function loadImages(){
        //for example here is a block of method
        //possibly throws exception. 
    }

    public function getLoan(){
        //lets assume here too
    }
}

在更高的层(我假设在您的视图中 - MXML)您会捕获如下异常:

var myBussiness:MyBussiness = new MyBussiness():
try {
    myBussiness.loadImages();
    //any other sequence process
    myBussiness.getLoan();
}
catch(error:Error){
    //here you process error
    //show it to user or make LOG
}

它仍然无法像您期望的那样发挥作用,但这是最佳实践。Rember 仅将 try catch 仅放在可能引发错误的代码上,因为 try catch 很昂贵。

于 2010-08-11T06:20:35.210 回答
4

最好的方法是使用 try catch:

try{
  //your command
} catch(e:Error){
  //your command
}
于 2010-08-11T06:30:51.440 回答
1

您可以使用 class.catch 捕获程序中所有未处理的错误UncaughtErrorEvent

所以,可能就是你想要的。文档中有一个示例(您可以放在addEventListener主类的构造函数中):

package
{
import flash.display.Sprite;
import flash.events.ErrorEvent;
import flash.events.MouseEvent;
import flash.events.UncaughtErrorEvent;

public class UncaughtErrorEventExample extends Sprite
{
    public function UncaughtErrorEventExample()
    {
        loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);

        drawUI();
    }

    private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
    {
        if (event.error is Error)
        {
            var error:Error = event.error as Error;
            // do something with the error
        }
        else if (event.error is ErrorEvent)
        {
            var errorEvent:ErrorEvent = event.error as ErrorEvent;
            // do something with the error
        }
        else
        {
            // a non-Error, non-ErrorEvent type was thrown and uncaught
        }
    }

    private function drawUI():void
    {
        var btn:Sprite = new Sprite();
        btn.graphics.clear();
        btn.graphics.beginFill(0xFFCC00);
        btn.graphics.drawRect(0, 0, 100, 50);
        btn.graphics.endFill();
        addChild(btn);
        btn.addEventListener(MouseEvent.CLICK, clickHandler);
    }

    private function clickHandler(event:MouseEvent):void
    {
        throw new Error("Gak!");
    }
}

}

See the docs, please.

于 2017-04-24T06:53:49.367 回答