hug*_*omg 15 javascript debugging dojo promise deferred
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!
});
Run Code Online (Sandbox Code Playgroud)
问题是,当我在IE上时,我只能看到'obj' is null or not an object错误,没有任何对相应行号的引用,也没有调试器停在违规行(就像我希望的那样).
这种问题使得代码很难调试,我现在能想到的唯一解决方案(搞乱控制流库或使用调试器或console.log进行逐步调试)是我的事情.宁可不必做.
为了允许在链被触发后添加errbacks,then将抢先捕获回调抛出的任何异常.我认为这是IE调试器没有停止错误或显示通常的错误消息的原因,其中包含行号.
没有行号的错误消息来自控制流库:它提供了一个deferredOnError挂钩,只要捕获并保存以供日后使用,就会调用该挂钩,默认行为是console.error-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);
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,我无法找到从IE中的错误对象获取行号或堆栈跟踪的方法,并且以一种不允许我重新抛出异常并让它冒泡到顶层的方式调用钩子.
我希望有一种更好的方法来调试异步代码,然后逐步调试调试器.在最好的情况下,有一种方法可以让调试器暂停异常(就像在未处理的异常上一样),或者至少是从抛出的Error对象中获取行号或堆栈跟踪的方法.
| 归档时间: |
|
| 查看次数: |
6679 次 |
| 最近记录: |