为什么没有看到带有'throw new Error'的堆栈跟踪?

Why am I not seeing a stack trace with 'throw new Error'?

本文关键字:Error 堆栈 new 跟踪 throw 为什么      更新时间:2023-09-26

在节点服务器上测试时,为什么使用下面的简单代码会得到以下错误?

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();

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

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

你的代码是这样做的:它调用方法'c',方法'b'调用方法'b',方法'a'抛出一个错误(方法'a'内部有一个抛出错误语句)。

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

函数正在显示输出。抛出新的错误。