在节点中记录编程错误的简单方法是什么?
What's a simple way to log a programming error in node?
注意:我编辑了这个问题以更准确地显示问题,而不是删除和重写它。希望没关系。
对于以下代码:
var Q = require('q');
function first (){
var d = Q.defer();
setTimeout(function(){
d.resolve([]);
}, 1000);
return d.promise;
}
function second(v){
sdf;
console.log("hi")
}
first()
.then(second);
如何判断里面有ReferenceError
?是在 then
调用中添加第二个函数参数的唯一选项吗?
尽管不推荐,但我尝试使用 process.on('uncaughtException')
但无济于事。
谢谢!
我认为在 contract
对象的声明之前捕获错误可能是合适的。所以像这样:
map(locations, function(loc) {
if(!loc.ClientId) {
console.log("Error: loc.ClientId is undefined");
} else {
var contract = {
"clientName": clients[loc.ClientId][0]
}
...
}
})
此处,当 loc.ClientId
未定义时,错误将记录到控制台。
这真的取决于你的堆栈跟踪是什么样的。例如,如果您使用的是 express 或 restify,您实际上可能需要监听 server
对象上的 uncaughtException
事件。错误通常不会丢失;将类似这样的内容放入示例 JS 文件中:
null.f();
您将看到抛出的 TypeError,正如您所期望的那样。
如果您不确定堆栈,请记录它:
console.log(new Error("this is my stack").stack);
像这样重写你的最终调用:
function errorHandler(err) {
console.log('You had an error, ' + err);
}
first
.then(second, errorHandler);
promise 捕获其中抛出的任何异常,您需要显式处理它。
特定于 q 的变体是:
first
.then(second)
.fail(errorHandler);
您可能认为这更容易阅读。
注意:我编辑了这个问题以更准确地显示问题,而不是删除和重写它。希望没关系。
对于以下代码:
var Q = require('q');
function first (){
var d = Q.defer();
setTimeout(function(){
d.resolve([]);
}, 1000);
return d.promise;
}
function second(v){
sdf;
console.log("hi")
}
first()
.then(second);
如何判断里面有ReferenceError
?是在 then
调用中添加第二个函数参数的唯一选项吗?
尽管不推荐,但我尝试使用 process.on('uncaughtException')
但无济于事。
谢谢!
我认为在 contract
对象的声明之前捕获错误可能是合适的。所以像这样:
map(locations, function(loc) {
if(!loc.ClientId) {
console.log("Error: loc.ClientId is undefined");
} else {
var contract = {
"clientName": clients[loc.ClientId][0]
}
...
}
})
此处,当 loc.ClientId
未定义时,错误将记录到控制台。
这真的取决于你的堆栈跟踪是什么样的。例如,如果您使用的是 express 或 restify,您实际上可能需要监听 server
对象上的 uncaughtException
事件。错误通常不会丢失;将类似这样的内容放入示例 JS 文件中:
null.f();
您将看到抛出的 TypeError,正如您所期望的那样。
如果您不确定堆栈,请记录它:
console.log(new Error("this is my stack").stack);
像这样重写你的最终调用:
function errorHandler(err) {
console.log('You had an error, ' + err);
}
first
.then(second, errorHandler);
promise 捕获其中抛出的任何异常,您需要显式处理它。
特定于 q 的变体是:
first
.then(second)
.fail(errorHandler);
您可能认为这更容易阅读。