为什么我没有看到与“抛出新的错误”的堆栈跟踪?

当在节点服务器上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正在显示输出。 抛出新的错误。