Как отладить мой асинхронный код, основанный на обещаниях, если библиотека поглощает все исключения?
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' is null or not an object
ошибки,без какой-либо ссылки на соответствующий номер строки и без остановки отладчика на ошибочной строке (как хотелось бы)
Такого рода проблема делает код болезненным для отладки, и единственные решения, о которых я могу подумать сейчас (возиться с библиотекой потока управления или прибегнуть к пошаговой отладке с помощью отладчика или console.log), - это вещи, которые я предпочел бы не делать.
Я думаю, что происходитЧтобы позволить ошибкам быть добавленными после запуска цепочки,then
будет преимущественно перехватывать любые исключения, вызванные обратными вызовами. Я думаю, что это причина того, что отладчик IE не останавливается на ошибке или показывает обычное сообщение об ошибке с номером строки в нем.
Сообщения об ошибках без номеров строк поступают из библиотеки потока управления: она предоставляетdeferredOnError
ловушка, которая вызывается всякий раз, когда исключение перехватывается и сохраняется для дальнейшего использования, а поведение по умолчанию - console.erroring объекта Error
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, и ловушка вызывается так, что я не могу просто перебросить исключение и позволить ему всплыть на верхний уровень.
Что я хочуЯ хочу иметь лучший способ отладки асинхронного кода, а затем пошагово идти вместе с отладчиком. В лучшем случаеспособ остановить отладчик исключений (как это происходит с необработанными исключениями)или же по крайней мере, способполучить номера строк или трассировки стека от объекта Error это было брошено.