Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   поимка ошибки (http://www.flasher.ru/forum/showthread.php?t=205417)

MyDuty 03.12.2013 22:37

поимка ошибки
 
Чего тут не хватает? Почему ошибка не ловиться? Специально поставил левый урл, что бы вылетала ошибка. Она вылетает, но трай не ловит ее. Почему? Или я чего-то элементарного не понимаю в этой конструкции?
Код AS3:

try{
        var loader: URLLoader = new URLLoader(new URLRequest("asd"));
}catch(error:Error){
        trace(error)
}


belv 04.12.2013 00:02

Как то так должно быть.
Код AS3:

try{
        var loader: URLLoader = new URLLoader(new URLRequest("asd"));
        loader.addEventListener(IOErrorEvent.IO_ERROR , _handlerIOError);
}catch(error:Error){
        trace(error)
}
function _handlerIOError(event:IOErrorEvent):void{
        throw new Error("Этот урл неверный");
}

Но тогда по сути и try не нужен, просто в приемнике события IOErrorEvent, можно создать исключение.

MyDuty 04.12.2013 00:10

2 belv:
ну как я в конце концов до этого и дошел, но вот зачем тогда вообще трай нужен?

Wolsh 04.12.2013 00:15

Цитата:

но вот зачем тогда вообще трай нужен?
Чтобы ловить Error.
IOErrorEvent это событие, а не Error.

MikroAcse 04.12.2013 00:19

"Трай" ловит ошибки только в синхронных функциях.
Лоадер синхронный только в AIR.

belv 04.12.2013 00:27

Например я использую try,catch для проверки данных из флешварс. Пишу так, если пришли данные равные null или пустая строка тогда сгенерировать ошибку, если нет присвоить переменной.Если ошибка сгенерирована то, в catch написан код. который показывает popup с ошибкой.Также есть еще применения этого блока.Если разобраться очень удобно.
Код AS3:

var VOFlashVars =  new VOFlashVars();
try{
        VOFlashVars.id = "lданные из флешварс"
}catch(error:Error){
        //Тут код показывающий popup
}
В классе VOFlashVars
пишим метод
public function set id(pId:String):void{
    if(pId == null || pId ==""){
throw new Error("Проверь заданы ли флешварс");
}else{
_id = pId;
}
}

Код писал прямо тут, главное передать идею.

GBee 04.12.2013 01:33

2belv Как-то вы используете исключения ради исключения.
Кстати
Код AS3:

if(pId == null || pId =="")

можно заменить на
Код AS3:

 if(!pId)


belv 04.12.2013 01:50

Да согласен, привычка.
Насчет, исключения ради исключения, не понял.

GBee 04.12.2013 02:11

Цитата:

Насчет, исключения ради исключения, не понял.
Не вижу смысла использовать отлов ошибки, если их можно обойти.

Код AS3:

var vars:VOFlashVars =  new VOFlashVars();
if(!vars.setId("данные из флешварс"))
{
    //Тут код показывающий popup
}
 
//В классе VOFlashVars
//пишем метод
public function setId(pId:String):Boolean
{
    if(pId)
        _id = pId;
    return Boolean(pId);
}


belv 04.12.2013 02:20

Не знаю, как то запутано на мой взгляд, две проверки и привидение строки к типу данных Boolean.


Часовой пояс GMT +4, время: 22:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.