下面的代码运行正常,没有异常,如果功能栏中出现异常,则程序刚刚完成,没有任何输出。我检查了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/