try-catch

错误处理方式,错误出现时,执行catch(){},会影响下面的代码执行 在一般情况下,try-catch 只能捕获同步任务,,无法捕获异步错误,也无法捕获语法错误 添加 asyn await 时,也可捕获异步任务的错误了,但仅限于 Promise的异步错误

  1. try{
  2. //正常执行的代码
  3. }catch(err){
  4. // 代码出错时执行的操作,例如打印错误,收集错误等
  5. }

将要执行的代码放到 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来进行包裹,例如 函数传参类型错误 等