Q promise onerror从未被引用过

时间:2014-05-10 16:05:32

标签: javascript node.js promise q

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的使用不太了解 我想用一个很好的堆栈跟踪跟踪未处理的异常(也可能是拒绝)

1 个答案:

答案 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然后被移除)