返回課程

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」。因此,所有同步錯誤都會被處理。

但這裡的錯誤並非在執行器執行時產生,而是在稍後產生。因此,承諾無法處理它。