console.log('here we go');new Promise( resolve => {
setTimeout( () => { console.log(2) throw new Error('bye');//这里不行
}, 2000); // throw new Error('bye');//放这里可以}).then( value => { console.log( value + ' world');
})
.catch( error => { console.log( 'Error:', error.message);
});
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
首先,在非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
添加回答
举报
0/150
提交
取消