在节点中记录编程错误的简单方法是什么?

时间:2015-02-11 00:07:42

标签: node.js q

注意:我编辑此问题是为了更准确地显示问题,而不是删除并重写它。希望没关系。

以下代码:

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'),但无济于事。

谢谢!

3 个答案:

答案 0 :(得分:1)

重写你的最终通话:

function errorHandler(err) {
  console.log('You had an error, ' + err);
}

first
  .then(second, errorHandler);

promise会捕获其中的任何异常,您需要明确处理它。

具体q的变体是:

first
  .then(second)
  .fail(errorHandler);

您可能会认为这更容易阅读。

答案 1 :(得分:0)

我认为在声明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未定义时,错误会记录到控制台。

答案 2 :(得分:0)

这实际上取决于堆栈跟踪的样子。例如,如果您正在使用快递或解析,您实际上可能需要在uncaughtException对象上侦听server事件。错误通常不会丢失;把这样的东西放到一个样本JS文件中:

null.f();

并且您会看到正如您所期望的那样抛出TypeError。

如果你不确定堆栈,请记录下来:

console.log(new Error("this is my stack").stack);