为什么我没有看到与“抛出新的错误”的堆栈跟踪?
当在节点服务器上testing时,为什么在下面这个简单的代码中出现以下错误?
code/app2/i.js:35 throw new Error("here") ^ Error: here
我实际上期待看到一个堆栈跟踪按照“Smashing node.js” ( 相关页面的图片35 ):
* node uncaught-http-js /uncaught-http.js:4 throw new Error("here"); ^ Error: This will be uncaught at Server.<anonymous> (/uncaught-http.js:4:9) at Server.emit(events.js:70:17) at HttpParser.onIncoming(http.js:1514:12) at HttpParser.onHeadersComplete(http.js:102:31) at Socket.andata (http.js:1410:22) at TCP.onread(net.js:354:27)
但是这没有发生。
这是代码。
function c () { b(); }; function b () { a(); }; function a () { setTimeout(function () { throw new Error('here'); }, 10); }; c();
你不会看到整个堆栈跟踪,因为你asynchronous地在A()中引发一个错误(使用setTimeout)。 如果你同步抛出 – 你会看到c() – > b() – > a()。
试试看: http : //jsbin.com/yirorimewe/1/edit?js,console
这就是你的代码所做的:它调用方法'c',调用方法'b',调用方法'a',抛出一个错误(在方法'a'中有一个抛出错误语句)。
你已经发布的是堆栈跟踪(它显示了错误发生的文件中的行)。
该function正在显示输出。 抛出新的错误。