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

时间:2015-05-25 20:11:06

标签: javascript node.js

为什么在节点服务器上进行测试时,使用下面这个简单的代码会出现以下错误?

code/app2/i.js:35
        throw new Error("here")
              ^
Error: here

我实际上希望看到堆栈跟踪as per the book 'Smashing node.js'picture of the relevant page 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();

3 个答案:

答案 0 :(得分:18)

您没有看到整个堆栈跟踪,因为您在A()异步(使用setTimeout)中抛出错误。如果你同步抛出它 - 你会看到跟踪c() - &gt; b() - &gt; a()。

试一试:http://jsbin.com/yirorimewe/1/edit?js,console

答案 1 :(得分:6)

这是您的代码所做的: 它调用方法&#39; c&#39;,调用方法&#39; b&#39;,调用方法&#39; a&#39 ;,这会引发错误(在方法内部&#39; a&#39; ;有一个抛出错误声明)。

您发布的堆栈跟踪(它显示了发生错误的文件中的行)。

答案 2 :(得分:-4)

该功能显示输出。抛出新错误。