Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 由throw()生成的node.js uncaughtException上缺少堆栈跟踪_Javascript_Node.js - Fatal编程技术网

Javascript 由throw()生成的node.js uncaughtException上缺少堆栈跟踪

Javascript 由throw()生成的node.js uncaughtException上缺少堆栈跟踪,javascript,node.js,Javascript,Node.js,我正在尝试捕获node.js uncaughtException的堆栈跟踪,它可以很好地处理不同的错误,但不能处理throw()语句: 异常处理时的正确堆栈跟踪: $ cat errorFunc.js process.on('uncaughtException', function(exception) { console.log('uncaughtException occurred: ' + exception.stack); }); MyError(); $ node erro

我正在尝试捕获node.js uncaughtException的堆栈跟踪,它可以很好地处理不同的错误,但不能处理throw()语句:

异常处理时的正确堆栈跟踪:

$ cat errorFunc.js 
process.on('uncaughtException', function(exception) {
    console.log('uncaughtException occurred: ' + exception.stack);
});
MyError();

$ node errorFunc.js 
    uncaughtException occurred: ReferenceError: MyError is not defined
    at Object.<anonymous> (/home/jolcese/code/WebEnclaves/Server/errorFunc.js:5:1)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3
$
知道为什么吗

谢谢 何塞


免责声明:我知道使用process.on('uncaughtException')是一件非常非常糟糕的事情,我会受到惩罚,但在这段代码中使用域不是一个选项。

JavaScript允许您抛出任何东西

如果您想在JavaScript中使用堆栈跟踪抛出错误,则需要抛出
Error
对象。

此外,throw是一个运算符,而不是一个函数

试一试


有关更多信息,请参阅Mozilla开发者网络。

如果您想让我详细说明如何以及为什么在虚拟机级别(v8中)执行此操作,请告诉我。我认为这与解决你的问题无关。谢谢本杰明的回答!。你知道为什么网络工作者的行为是不同的吗?投掷;Web Worker调用(如果已注册)中的语句OneError回调提供描述、行号、colno等@joseocese是的,最简单的答案是这是因为它们是这样设计的。WebWorkers是web标准节点不遵守的一部分。只是网络工作者很有用。通常,当您关心调试时,您应该总是抛出错误对象,而不是其他东西(调试应该总是带有错误)
$ cat errorThrow.js 
process.on('uncaughtException', function(exception) {
    console.log('uncaughtException occurred: ' + exception.stack);
});
throw('my error');

$ node errorThrow.js 
uncaughtException occurred: undefined
$
throw new Error('my error');