Как поймать все исключения в Flex?

Эта функция сравнивает два массива произвольной формы и dimesionality:

function equals(a1, a2) {

    if (!Array.isArray(a1) || !Array.isArray(a2)) {
        throw new Error("Arguments to function equals(a1, a2) must be arrays.");
    }

    if (a1.length !== a2.length) {
        return false;
    }

    for (var i=0; i<a1.length; i++) {
        if (Array.isArray(a1[i]) && Array.isArray(a2[i])) {
            if (equals(a1[i], a2[i])) {
                continue;
            } else {
                return false;
            }
        } else {
            if (a1[i] !== a2[i]) {
                return false;
            }
        }
    }

    return true;
}
43
задан Yaba 19 September 2008 в 23:43
поделиться

5 ответов

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

единственное решение как есть должен поместить попытку/выгоду в логические места и удостовериться, что Вы слушаете ОШИБКУ (или ОТКАЗ для веб-сервисов) событие для чего-либо, что диспетчеризирует их.

Редактирование: , Кроме того, на самом деле невозможно зафиксировать ошибку, брошенную от обработчика событий. Я зарегистрировался ошибка на Adobe Bug System.

Обновление 12.01.2010: Глобальная обработка ошибок теперь поддерживается в Flash 10.1 и AIR 2.0 (оба в бета-версии) и достигается путем подписки событие UNCAUGHT_ERROR LoaderInfo.uncaughtErrorEvents. Следующий код взят от пример кода на livedocs:

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

    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
        }
    }
51
ответ дан Community 4 August 2019 в 18:19
поделиться

Существует ошибка/запрос новых функций для этого в системе управления ошибки Adobe. Голосование за него, если это важно для Вас.

http://bugs.adobe.com/jira/browse/FP-444

9
ответ дан 4 August 2019 в 18:19
поделиться

Обратите внимание, что ошибка FP-444 (см. Выше) связана с http://labs.adobe.com/technologies/flashplayer10/features.html#developer , что с октября 2009 г. показывает, что это будет возможно с версии 10.1, которая в настоящее время, 28 октября 2009 г., все еще не выпущена - так что я думаю, мы увидим, правда ли это, когда она будет выпущена

3
ответ дан 26 November 2019 в 22:53
поделиться

Работает во Flex 3.3.

 if(loaderInfo.hasOwnProperty("uncaughtErrorEvents")){
    IEventDispatcher(loaderInfo["uncaughtErrorEvents"]).addEventListener("uncaughtError", uncaughtErrorHandler);
 }
4
ответ дан 26 November 2019 в 22:53
поделиться

Альтернатива принятому ответу с использованием try-catch. Думаю, медленнее, но читать проще.

try {
    loaderInfo.uncaughtErrorEvents.addEventListener("uncaughtError", onUncaughtError);
} catch (e:ReferenceError) {
    var spl:Array = Capabilities.version.split(" ");
    var verSpl:Array = spl[1].split(",");

    if (int(verSpl[0]) >= 10 &&
        int(verSpl[1]) >= 1) {
        // This version is 10.1 or greater - we should have been able to listen for uncaught errors...
        d.warn("Unable to listen for uncaught error events, despite flash version: " + Capabilities.version);
    }
}

Конечно, вам понадобится последняя версия 10.1 playerglobal.swc, чтобы успешно скомпилировать этот код: http://labs.adobe.com/downloads/flashplayer10.html

3
ответ дан 26 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: