try-catch
错误处理方式,错误出现时,执行
catch(){}
,会影响下面的代码执行 在一般情况下,try-catch 只能捕获同步任务,,无法捕获异步错误,也无法捕获语法错误 添加asyn await
时,也可捕获异步任务的错误了,但仅限于Promise
的异步错误
try{
//正常执行的代码
}catch(err){
// 代码出错时执行的操作,例如打印错误,收集错误等
}
将要执行的代码放到 try
里进行执行,如果代码出错,立即退出执行,开始运行catch
里的代码,此时 catch
接收一个错误对象 err
,错误对象里包含了此次错误的信息。
错误对象就算不使用也必须定义
try{
//正常执行的代码
}catch(err){
console.log('代码出错',err)
}
捕获异步错误(Promise)
//在 try-catch 的外层函数使用 async 在 try 内执行的代码 使用 await
//引入一个封装好的axios 请求 signOn()
async onLoad(){
try{
let res = await signOn(params)
}catch(err){
console.log('打印一个异步错误',err)
}
}
finally 子句
finally 在 try-catch 内执行,当 try 内的代码执行完毕后,将接着执行 finally 内的代码, 但是当try 内的代码出现错误,开始执行 catch 内的代码时,不会影响 finally 内的代码执行 try-catch 无法阻止 finally 的执行,return 也不行
try{
return 10
}catch(err){
return 20
} finally{
return 0
}
无论正确执行还是错误执行,最后都会执行 **finally**
内的代码,如果 **finally **
内的代码有 return 将会替换掉当前 try 或 catch 内的 return 的代码
try-catch 用法
- 当
try-catch
内发生错误时,浏览器会认为该错误已经被处理,一为不确定的错误就可以通过try-catch
来将其包裹防止错误发生来影响代码运行 - 但不是任何的错误都应该用
try-catch
来进行包裹,它应该用在无法控制的错误上,例如 组件库出错,又无法修改组件库,只能将执行的代码通过try-catch
来进行包裹防止其报错阻碍代码执行 - 明确会发生的错误不适合用
try-catch
来进行包裹,例如 函数传参类型错误 等