記錄Javascript 異常捕獲

try...catch

JS中同步過程和ES6中asyn/await函數均可以經過try...catch捕獲異常.多層的try/catch能夠傳遞、中斷異常。bash

try {
    return x/y;
} catch(e) {
    console.error(e);
}

複製代碼
try {
    try {
        ...
        throw Error("error");
    } catch(e) {
        console.error("inner");
    } finally {
        console.error("Final");
    }
} catch(e) {
    console.error("outer")
}
// ============ console out
// inner
// Final
// outer
複製代碼

在finally中顯示的return能夠中斷error的傳播。參考MSDN try...catch異步

Promise中的異常處理

Promise異常沒法經過try/catch捕獲,而是經過Promise.catch進行處理。async

async function() {
    try {
        await quey();
    } catch(e) {
        console.log(e);
    }
}
複製代碼
Promise.resolve().then((resolve, reject) => {
    throw Error("Error");
}).catch((e) => {console.log(e});
複製代碼

問題

Promise使用時不必定會記得處理異常,致使Promise一直處於pending的狀態。NodeJS提供了一個事件來監聽是否原生的Promise進行了異常處理函數

process.on('unhandledRejection', function (err, p) {
    console.error('catch exception:',err.stack)
});
複製代碼

Node.js內部是如何捕獲異步錯誤的ui

相關文章
相關標籤/搜索