弒天下
2019-01-31 21:24:40
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貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
首先,在非async函數(shù)中,try-catch并不能捕獲異步操作中產(chǎn)生的異常,Promise
/setTimeout
都是典型的異步操作。
其次,Promise
的catch
會(huì)在resolve
被調(diào)用之前throw
的Error
對(duì)象,或者reject
被調(diào)用后觸發(fā)。
最后,setTimeout
是個(gè)異步操作,當(dāng)前操作執(zhí)行完之后才會(huì)執(zhí)行,所以當(dāng)前的try-catch并不能處理setTimeout
回調(diào)的異常。
綜合以上3點(diǎn),
你的
throw
在setTimeout
中,且沒(méi)有reject
,Promise
不能catch
到如果移動(dòng)到
setTimeout
下一句,相當(dāng)于你的Promise
沒(méi)有resolve
之前throw
了Error
添加回答
舉報(bào)
0/150
提交
取消