tryCatch
2023年03月14日
一、认识
try{}catch(){}
能捕捉到的异常必须是线程执行已经进入 try catch
但 try catch
未执行完的时候抛出来的。当程序运行到 try catch
里面时,如果未报错,则忽略 catch
中的代码,若报错,则不执行 try
报错内容后面的代码,转而执行 catch
中的代码。
二、语法
try{
console.log('代码正确时执行的')
}catch(error){
console.log('代码报错时执行的')
}finally{
console.log('代码正确和错误都会执行')
}
三、特点
3.1 无法捕获语法错误
try {
console.log(c.);
} catch (error) {
console.log('error', error);
}
因为语法错误是在语法检查阶段就报错了,线程执行尚未进入 try catch
代码块,自然就无法捕获到异常。
3.2 无法捕获网络异常
3.3 无法捕获异步错误
因为等异步函数里面的事件进入事件队列的时候,主线程已经离开了try catch
,所以try catch
是无法捕获异步函数的错误的。
try {
setTimeout(() => {
console.log(c);
});
} catch (error) {
console.log('error', error);
}
3.4 无法捕获 Promise 异常
当异步函数抛出异常时,对于宏任务而言,执行函数时已经将该函数推入栈,此时并不在 try-catch
所在的栈,所以 try-catch
并不能捕获到错误。
try {
Promise.reject('error');
} catch (error) {
console.log('error', error);
}