跳到主要内容

tryCatch

2023年03月14日
柏拉文
越努力,越幸运

一、认识


try{}catch(){} 能捕捉到的异常必须是线程执行已经进入 try catchtry 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);
}

3.5 无法捕获网络资源加载错误