我希望浏览器在发生类型错误时显示错误消息。
错误如无法读取未定义的属性 or 未定义参考.
new Promise(function(resolve,reject){
// do stuff ...
reject('something logical is wrong');
}).catch(e => console.error(e));
new Promise(function(resolve,reject){
// do stuff, and a syntax error :/
var a = { };
a.something.otherthing = 1; /* we have an error here */
// ...
}).catch(e => console.error(e));
在第一个示例中,错误是逻辑错误,可以catch它在抓住(..) block.
但在第二个例子中,这是一个明显的开发错误,这种错误在开发新东西时经常发生。我不想捕获它,我希望浏览器向我显示该错误,就像控制台中的其他错误一样。
我希望能够打开chrome 遇到异常时暂停并查看其他变量的状态。我想在控制台中查看堆栈跟踪。
我希望它表现得像normal error.
任何想法?
与同步代码中的异常不同,同步代码变成uncaught一旦代码返回到idle,浏览器通常不知道承诺链的逻辑末端,这是一个异步错误可以认为是未捕获。毕竟链是动态组装的,因此最好用最终的终止.catch
在链的逻辑末端,即空闲的异步等效项。
有决赛.catch(e => console.error(e))
对我来说似乎很合理,但你是对的,浏览器倾向于以与未捕获的异常不同的方式显示这些错误。如果你想让它们看起来一样,你可以使用这个技巧:
.catch(e => setTimeout(() => { throw e; }))
这会抛出e
,包含原始堆栈跟踪和行号,在下一个循环中,在承诺链之外,没有任何东西可以捕获它,并且它将被报告为未捕获。我们用setTimeout
克服默认行为.catch
这是为了捕获链中的任何异常,以防您打算继续链接。
通过这一点,我希望您看到“逻辑”错误和其他错误之间的任何区别都是无关紧要的。任何导致链尾部的错误对于链来说都是致命的,即uncaught(当然,您可以将“逻辑”与最终捕获中的其他错误进行分类,并根据您的选择以不同的方式显示它们。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)