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異常沒法經過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)
});
複製代碼