錯誤原因

發佈於 · 標籤為 ECMAScript

想像一下,您有一個函式呼叫兩個獨立的工作負載 doSomeWorkdoMoreWork。這兩個函式都可能會擲出相同類型的錯誤,但您需要以不同的方式處理它們。

捕捉錯誤並擲出具有額外背景資訊的錯誤是解決此問題的常見方法,例如

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 中提供。

錯誤原因支援 #