【发布时间】:2016-06-08 16:36:51
【问题描述】:
我对 Q Promise 错误处理的理解有点困惑。假设我有以下功能(仅供演示):
function first() {
console.log('first');
var done = Q.defer();
done.resolve('first');
return done.promise;
}
function second() {
console.log('second');
var done = Q.defer();
done.resolve('second');
return done.promise;
}
function third() {
console.log('third');
var done = Q.defer();
done.resolve('third');
return done.promise;
}
function fourth() {
console.log('fourth');
var done = Q.defer();
done.resolve('fourth');
return done.promise;
}
function doWork() {
return first().then(function() {
return second();
}).then(function() {
return third()
}).then(function() {
return fourth();
});
}
doWork().catch(function(err) {
console.log(err);
});
一切顺利。
现在,如果在 second、third 或 fourth 函数中出现一些错误(例如由异步调用引发),我可以优雅地捕获它。
例如,如果在第二、第三或第四函数中,我添加:
throw new Error('async error');
错误被捕获。完美!
但让我感到困惑的是,如果在第一个函数中抛出错误,则错误不会被捕获并且会中断我的执行。
请有人告诉我为什么或我做错了什么?
非常感谢!
【问题讨论】:
标签: javascript error-handling promise q