【发布时间】:2015-08-23 06:53:00
【问题描述】:
为什么我不能在 catch 回调中抛出一个 Error 并让进程处理错误,就像它在任何其他范围内一样?
如果我不这样做 console.log(err) 什么都不会打印出来,我对发生的事情一无所知。该过程刚刚结束...
例子:
function do1() {
return new Promise(function(resolve, reject) {
throw new Error('do1');
setTimeout(resolve, 1000)
});
}
function do2() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error('do2'));
}, 1000)
});
}
do1().then(do2).catch(function(err) {
//console.log(err.stack); // This is the only way to see the stack
throw err; // This does nothing
});
如果回调在主线程中执行,为什么Error会被黑洞吞噬?
【问题讨论】:
-
它不会被黑洞吞噬。它拒绝
.catch(…)返回的承诺。 -
而不是
.catch((e) => { throw new Error() }),写成.catch((e) => { return Promise.reject(new Error()) })或简单地写成.catch((e) => Promise.reject(new Error())) -
@chharvey 您评论中的所有代码 sn-ps 具有完全相同的行为,除了最初的代码显然最清楚。
标签: javascript asynchronous promise throw es6-promise