在 setTimeout 和 setInterval 中捕獲異常
錯誤和異常在所有編程語言中都很常見。在 JavaScript 中,我們使用 try...catch
用於捕獲意外錯誤和異常的語句。
try...catch
怎麼做 工作嗎?
try {
// block of code
} catch (error) {
// handle the error
} finally {
// execute in all cases
}
try
子句首先執行。- 如果沒有拋出異常,
catch
子句被忽略並執行try
聲明完成。 - 如果在
try
執行過程中引發異常 子句,則該子句的其餘部分將被忽略。catch
子句被執行,然後是try
之後的內容 語句被執行。 finally
子句是可選的,在兩個子句之後執行,無論是否引發異常。
setTimeout
中的異常處理 和 setInterval
setTimeout
和 setInterval
函數在指定的毫秒數後調用或計算表達式。如果我們把這些方法放在 try
子句並引發異常,catch
子句不會捕獲其中任何一個:
try {
setTimeout(() => {
throw new Error(`An exception is thrown`);
}, 500);
} catch (error) {
console.error({ error });
}
這是因為 try...catch
語句是同步工作的,相關函數在一定時間後異步執行。
為了解決這個問題,我們必須把 try...catch
函數內部的塊:
setTimeout(() => {
try {
throw new Error(`An exception is thrown`);
} catch (error) {
console.error({ error });
}
}, 500);