Ami*_*sta 6 javascript es6-promise
我希望浏览器在发生类型错误时显示错误消息.
错误,如无法读取属性的未定义或未定义的引用.
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));
Run Code Online (Sandbox Code Playgroud)
在第一个例子中,错误是逻辑错误,并且可以在catch(..)块中捕获它.
但在第二个例子中,它是一个明显的开发错误,它在开发新东西时一直发生.我不想抓住它,我希望浏览器像控制台中的其他错误一样向我显示错误.我希望能够在异常上打开chrome暂停并查看其他变量的状态.我想在控制台中看到堆栈跟踪.
我希望它像一个正常的错误.
任何的想法?
与同步代码中的异常不同,一旦代码返回空闲状态就会变为未被捕获,浏览器通常不知道承诺链的逻辑结束,这是异步错误可被视为未被捕获的地方.链条毕竟是动态组装的,因此最好在链的逻辑末端终止,即异步等效空闲..catch
有一个决赛.catch(e => console.error(e))对我来说似乎很合理,但你是对的,浏览器倾向于显示这些错误与未捕获的异常不同.如果你想让它们看起来一样,你可以使用这个技巧:
.catch(e => setTimeout(() => { throw e; }))
Run Code Online (Sandbox Code Playgroud)
这将抛出e,包含原始堆栈跟踪和行号,在下一个周期和promise链之外,没有任何东西可以捕获它,它将被报告为未捕获.我们setTimeout用来克服其默认行为,.catch即在您打算继续链接的情况下捕获链中的任何异常.
有了这个,我希望你看到"逻辑"和其他错误之间的区别是无关紧要的.任何使它成为链尾的错误对于链是致命的,即未被捕获(尽管当然你可以从最终捕获中的其他错误中分类"逻辑"并且如果你选择则以不同方式显示它们.)