注意:我编辑此问题是为了更准确地显示问题,而不是删除并重写它。希望没关系。
以下代码:
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')
,但无济于事。
谢谢!
答案 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);