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

Node.js 使用q.js时如何获取异常信息,node.js,q,Node.js,Q,下面的代码在没有异常的情况下运行良好,如果函数栏中出现异常,则程序刚刚完成,没有任何输出。我检查了Q的源代码,它捕获异常并拒绝它。花了一些时间,但仍然不知道获取异常信息的正确方法 function foo(val) { var deferred = Q.defer(); if (val) { deferred.resolve(val); } else { deferred.reject(val); } return def

下面的代码在没有异常的情况下运行良好,如果函数栏中出现异常,则程序刚刚完成,没有任何输出。我检查了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();

首先,你从酒吧返回的承诺永远不会得到解决或拒绝。你所做的只是在第一行创建它,不做任何事情,然后在最后一行返回它的承诺

假设您是这样修复的:

现在,在代码的末尾,您仍然在查找错误,但这些错误并没有被触发。打电话的时候。比我们第一次的承诺,一个新的承诺会被回复。想想“then”就是在之前的承诺的基础上创造一个新的承诺。 这样修复它将给我们在“then”承诺中抛出的异常,因为在then处理程序中抛出的异常被用作拒绝值。 看看:


这张支票和你的相似,谢谢。我的意图不是抛出异常,而是检测由其他api抛出的异常。
function bar() {
  var promise = foo(true);
function bar() {  
  return foo(true).then(function(res) {....