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