Во флеш AS3 Как поставить одиночный код try catch для того, чтобы отлавливать ошибки во всем классе? - PullRequest
2 голосов
/ 11 августа 2010

Во Flash AS3 я хочу написать отдельный блок try catch , чтобы отследить любые ошибки во всем классе.
Например, у меня много функций в myClass.as.Я не хочу писать в каждой функции, попробуйте использовать блоки catch для отлова ошибок в этой функции.
Есть ли способы сделать это?

Спасибо!

Ответы [ 3 ]

8 голосов
/ 11 августа 2010

ты не можешь! такого простого способа не существует даже на другом языке, кроме 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
}

все же он не может творить магию, как вы ожидаете, но это лучшая практика. Запомните только поставить try catch только для кода, который может выдать ошибку , потому что try catch стоит дорого.

4 голосов
/ 11 августа 2010

Лучше всего использовать try catch:

try{
  //your command
} catch(e:Error){
  //your command
}
0 голосов
/ 24 апреля 2017

Вы можете перехватить все не обработанные ошибки в вашей программе, используя 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!");
    }
}

}

См. документы , пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...