Kris Kowal的Q文档指出Q.onerror
是在未处理的例外情况下调用的。
我不能让它发挥作用:
var Q = require('q');
Q.longStackSupport = true;
var util = require('util');
Q.onerror=function(){
console.log('Q.onerror::')
console.log(util.inspect(arguments))
}
function get(){
var def=Q.defer();
def.resolve('resolved');
return def.promise;
}
get()
.then(function(val){
console.log('ok:'+val)
undefined._prop; // i would expect this exception to be
// forwarded to Q.onerror... but it doesn't
console.log('not reachd')
});
输出:
ok:resolved
我想我对Q.onerror
的使用不太了解
我想用一个很好的堆栈跟踪跟踪未处理的异常(也可能是拒绝)
答案 0 :(得分:1)
Q目前没有跟踪*未处理的拒绝,所以你必须明确告诉它链已经结束。
Q.onerror
处理done
子句中未处理的异常:
get()
.done(function(val){ // you can not chain this, this indicates the chain is done
console.log('ok:'+val)
undefined._prop; // i would expect this exception to be
// forwarded to Q.onerror... but it doesn't
console.log('not reachd')
});
这与像Bluebird这样的库不同,它可以找出自己的未处理拒绝,或Firefox中使用GC检测未处理拒绝的本机承诺。
*(atm,实验性特征被添加到Q然后被移除)