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

标签 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();

最佳答案

首先,您从 bar() 返回的 deferred promise 永远不会被解析或拒绝(您所做的就是在第一行创建它,不对其执行任何操作,并在最后一行返回它的 promise )

假设您是这样修复的:http://jsfiddle.net/KW9d9/

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

现在(在代码末尾)您仍在寻找错误,而不是在它们被触发的 promise 上。当对我们的第一个 promise 调用 .than 时,会返回一个新的 promise 。认为“然后”正在创建一个新的 promise 来包装以前的 promise 。 像这样修复它将使我们在“then” promise 中抛出异常,因为 then 处理程序中抛出的异常被用作拒绝值。 看:http://jsfiddle.net/ybefw/

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

关于node.js - 使用q.js时如何获取异常信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20069035/

相关文章:

javascript - 具有自定义验证的动态表单,我应该使用 NoSQL 还是 SQL 进行存储?

node.js - Nodemailer 附件不起作用

node.js,socket.io 只能在本地工作,无法从内网系统访问

javascript - Q.nfcall 和 Q.fcall 有什么区别?

javascript - 如何让promise返回结果?

javascript - 为什么我收到 ReferenceError : AbortController is not defined in Discord. js v13?

node.js - 销毁指令中的 $interval

javascript - $q.all 在收到 404 响应时中止所有 promise

node.js - NodeJS 中使用 q.all 命名 Promise 结果

javascript - 如何从 Q.when() 解析一系列分辨率?