猿问

有大佬遇到过这个问题吗:Promise为什么无法捕获错误?大佬们有什么好的建议?

console.log('herewego');
newPromise(resolve=>{
setTimeout(()=>{
console.log(2)
thrownewError('bye');//这里不行
},2000);
//thrownewError('bye');//放这里可以
}).then(value=>{
console.log(value+'world');
})
.catch(error=>{
console.log('Error:',error.message);
});
慕无忌1623718
浏览 391回答 2
2回答

FFIVE

首先,在非async函数中,try-catch并不能捕获异步操作中产生的异常,Promise/setTimeout都是典型的异步操作。其次,Promise的catch会在resolve被调用之前throw的Error对象,或者reject被调用后触发。最后,setTimeout是个异步操作,当前操作执行完之后才会执行,所以当前的try-catch并不能处理setTimeout回调的异常。综合以上3点,你的throw在setTimeout中,且没有reject,Promise不能catch到如果移动到setTimeout下一句,相当于你的Promise没有resolve之前throw了Error

慕斯709654

newPromise((resolve,reject)=>{setTimeout(()=>{console.log(2)reject('bye');},2000);})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答