Проблема
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
errors, без ссылки на соответствующий номер строки и без отладки, останавливающейся на нарушающей строке (например, я хочу это было бы).
Такая проблема делает код причиной отладки и единственными решениями, о которых я могу думать прямо сейчас (возиться с библиотекой потока управления или прибегать к пошаговой отладке с помощью отладчика или console.log) вещи, которые я бы предпочел не делать.
То, что я думаю, происходит
Для того, чтобы добавить адвенчуры после запуска цепочки, then
будет упреждать любые исключения, вызванные обратными вызовами. Я думаю, что это причина того, что отладчик IE не останавливается на ошибке или показывает обычное сообщение об ошибке с номером строки в нем.
Сообщения об ошибках без номеров строк поступают из библиотеки потока управления: он предоставляет крюк deferredOnError
, который вызывается всякий раз, когда исключение поймано и сохраняется позже, а поведение по умолчанию - console.error-ing the 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, и крюк вызывается таким образом, который не позволяет мне просто перестроить исключение и позволить ему закрашиваться до toplevel.
Что я хочу
Я хочу иметь лучший способ для отладки асинхронного кода, а затем шаг за шагом отладчика. В лучшем случае можно отключить отладчик на исключениях (как и при необработанных исключениях) или, по крайней мере, способ получить номера строк или стек трассировки из объекта Error, который был брошен.