想像一下,您有一個函式呼叫兩個獨立的工作負載 doSomeWork
和 doMoreWork
。這兩個函式都可能會擲出相同類型的錯誤,但您需要以不同的方式處理它們。
捕捉錯誤並擲出具有額外背景資訊的錯誤是解決此問題的常見方法,例如
function doWork() {
try {
doSomeWork();
} catch (err) {
throw new CustomError('Some work failed', err);
}
doMoreWork();
}
try {
doWork();
} catch (err) {
// Is |err| coming from |doSomeWork| or |doMoreWork|?
}
不幸的是,上述解決方案很費力,因為需要建立自己的 CustomError
。更糟的是,沒有開發人員工具能夠為意外例外提供有用的診斷訊息,因為對於如何正確表示這些錯誤沒有共識。
到目前為止,缺少的是鏈結錯誤的標準方法。JavaScript 現在支援錯誤原因。可以將額外的選項參數新增到 Error
建構函式中,並附帶 cause
屬性,其值將指定給錯誤執行個體。然後可以輕鬆地鏈結錯誤。
function doWork() {
try {
doSomeWork();
} catch (err) {
throw new Error('Some work failed', { cause: err });
}
try {
doMoreWork();
} catch (err) {
throw new Error('More work failed', { cause: err });
}
}
try {
doWork();
} catch (err) {
switch(err.message) {
case 'Some work failed':
handleSomeWorkFailure(err.cause);
break;
case 'More work failed':
handleMoreWorkFailure(err.cause);
break;
}
}
此功能在 V8 v9.3 中提供。
錯誤原因支援 #
- Chrome: 自版本 93 起支援
- Firefox: 自版本 91 起支援
- Safari: 自版本 15 起支援
- Node.js: 不支援
- Babel: 不支援