使用q.js时如何获取异常信息

时间:2013-11-19 10:29:53

标签: node.js q

以下代码正常运行,没有异常,如果函数栏中有异常,程序刚刚完成,没有任何输出。我检查了Q的源代码,它捕获异常并拒绝它。花了一些时间,但仍然不知道什么是获取异常信息的正确方法。

function foo(val) {
    var deferred = Q.defer();
    if (val) {
        deferred.resolve(val);
    } else {
        deferred.reject(val);
    }

    return deferred.promise;
}

function bar() {
    var deferred = Q.defer();
    foo(true)
    .then(function(res) {
        throw new Error('true error!');
        deferred.resolve(true);
    }, function(err) {
        throw new Error('false error!');
        deferred.reject(false);
    });

    return deferred.promise;
}

bar()
.then(function(res) {
    console.log('true');
}, function(err) {
    console.log('false');
})
.done();

1 个答案:

答案 0 :(得分:0)

首先,你从bar()返回的deferred的延迟永远不会被解决或拒绝(你只需要在第一行创建它,不做任何事情,并在最后一行返回它的承诺)

我们假设你用这种方式修复它:http://jsfiddle.net/KW9d9/

function bar() {
  var promise = foo(true);

现在(在你的代码的最后)你仍然在寻找错误而不是它们被解雇的承诺。当我们的第一个承诺调用.than时,会返回一个新的承诺。想想'那么'正在创造一个包含前一个的新承诺。 像这样修复它会给我们在'then'承诺中引发的异常,因为在then处理程序中抛出的异常被用作拒绝值。 请看:http://jsfiddle.net/ybefw/

function bar() {  
  return foo(true).then(function(res) {....