Эта функция сравнивает два массива произвольной формы и 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;
}
Нет никакого пути, который будет уведомлен относительно неперехваченных исключений в 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
}
}
Существует ошибка/запрос новых функций для этого в системе управления ошибки Adobe. Голосование за него, если это важно для Вас.
Обратите внимание, что ошибка FP-444 (см. Выше) связана с http://labs.adobe.com/technologies/flashplayer10/features.html#developer , что с октября 2009 г. показывает, что это будет возможно с версии 10.1, которая в настоящее время, 28 октября 2009 г., все еще не выпущена - так что я думаю, мы увидим, правда ли это, когда она будет выпущена
Работает во Flex 3.3.
if(loaderInfo.hasOwnProperty("uncaughtErrorEvents")){
IEventDispatcher(loaderInfo["uncaughtErrorEvents"]).addEventListener("uncaughtError", uncaughtErrorHandler);
}
Альтернатива принятому ответу с использованием 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