Как мне отладить свой асинхронный код, основанный на обещаниях, если библиотека поглощает все исключения?

Проблема

JSFiddle : http://jsfiddle.net/missingno/Gz8Pe/2/

У меня есть код, который выглядит примерно так:

var d = new Deferred();
d.resolve(17);
return d.then(function(){
     //do some stuff...
})
.then(function(){
    var obj = a_funtion_that_returns_null_on_IE();
    var x = obj.some_property; //BOOM!
});

Проблема в том, что когда я использую IE, все, что я вижу, это ' obj 'имеет значение null или не является ошибкой объекта , без какой-либо ссылки на соответствующий номер строки и без остановки отладчика на ошибочной строке (как я бы хотел).

Из-за такого рода проблем отладка кода затруднена, и это единственные решения, о которых я могу думать прямо сейчас (возиться с библиотекой потока управления или прибегать к пошаговой отладке с помощью отладчика или console.log) то, что я бы предпочел не делать.

Я думаю, что происходит.

Чтобы разрешить добавление ошибок после запуска цепочки, , затем превентивно перехватит любые исключения, генерируемые обратными вызовами. Я думаю, что это причина того, что отладчик IE не останавливается при ошибке или не показывает обычное сообщение об ошибке с номером строки в нем.

Сообщения об ошибках без номеров строк поступают из библиотеки потока управления: она предоставляет ловушку deferredOnError , которая вызывается всякий раз, когда исключение перехватывается и сохраняется на потом, а поведение по умолчанию - console.error -ing the Error object:

dojo.config.deferredOnError = function(err){
    //a chance to log the exception after it is captured by "then"
    //or do other things with it
    console.error(err);
}

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

Чего я хочу

Я хочу иметь лучший способ отладки асинхронного кода, а затем пошагово выполнять отладчик. В лучшем случае способ остановить отладчик для исключений (как это происходит с необработанными исключениями) или , по крайней мере, способ получить номера строк или трассировки стека из выданный объект ошибки .

15
задан hugomg 8 February 2012 в 18:15
поделиться