setTimeout 中的錯誤
你認為 .catch
會觸發嗎?說明你的答案。
new Promise(function(resolve, reject) {
setTimeout(() => {
throw new Error("Whoops!");
}, 1000);
}).catch(alert);
答案是:不會
new Promise(function(resolve, reject) {
setTimeout(() => {
throw new Error("Whoops!");
}, 1000);
}).catch(alert);
如章節中所述,函式程式碼周圍有一個「隱含的 try..catch
」。因此,所有同步錯誤都會被處理。
但這裡的錯誤並非在執行器執行時產生,而是在稍後產生。因此,承諾無法處理它。