IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【JavaScript】try/catch和Promise.catch捕捉错误的区别? -> 正文阅读

[JavaScript知识库]【JavaScript】try/catch和Promise.catch捕捉错误的区别?

【JavaScript】try/catch和Promise.catch捕捉错误的区别?

前言

try/catch 语句 和 Promise catch() 方法捕获错误的方式有所不同。
try/catch 捕获的是同步错误,即同步任务产生的错误。

try/catch

  • 同步任务未使用 try/catch 语句包裹,则 JavaScript 运行时会暂停在使用 throw 关键字抛出错误的地方。
console.log('开始同步任务')
throw Error('出错了')
console.log('结束同步任务')

在这里插入图片描述

  • 同步任务使用 try/catch 语句包裹,则不影响抛出错误后,后续代码逻辑的执行。
console.log('开始同步任务')
try {
  throw Error('出错了')
} catch (error) {
  console.log('try catch捕获同步错误', error)
}
console.log('结束同步任务')

在这里插入图片描述

阶段总结

  • throw 关键字抛出错误后, JavaScript 运行时会暂停在使用 throw 关键字抛出错误的地方。
  • try/catch 语句包裹可能抛出错误的同步任务,则不会阻止运行时的继续执行。

Promise.catch

  • Promise 抛出错误,并不会阻止运行时继续执行同步任务。
console.log('开始同步任务')
Promise.reject(Error('出错了'))
console.log('结束同步任务')

在这里插入图片描述

  • Promise 抛出错误并使用 catch() 方法捕获。
new Promise((resolve, reject) => {
  console.log('开始同步任务')
  reject(Error('出错了'))
}).catch(e => {
  console.log('Promise catch捕获异步错误', e)
}).then(() => {
  console.log('继续同步任务')
})
console.log('结束同步任务')

在这里插入图片描述

  • Promise 抛出错误并使用 try/catch 语句捕获。
try {
  new Promise((resolve, reject) => {
    console.log('开始同步任务')
    reject(Error('出错了'))
  })
} catch (error) {
  console.log('try catch捕获同步错误', error)
}
console.log('结束同步任务')

在这里插入图片描述

  • Promise 抛出错误并使用 try/catch 语句和 catch() 方法捕获。
try {
  new Promise((resolve, reject) => {
    console.log('开始同步任务')
    reject(Error('出错了'))
  }).catch(e => {
    console.log('Promise catch捕获异步错误', e)
  }).then(() => {
    console.log('继续同步任务')
  })
} catch (error) {
  console.log('try catch捕获同步错误', error)
}
console.log('结束同步任务')

在这里插入图片描述

阶段总结

  • try/catch 语句只能捕获同步错误,无法捕获 Promise 抛出的异步错误。
  • 同理,try/catch 亦不能捕获 async 异步函数抛出的错误。
  • async 异步函数抛出的错误无法被 try/catch 语句捕获
async function fn () {
  throw Error('出错了')
}
try {
  console.log('开始同步任务')
  fn()
} catch (error) {
  console.log('try catch捕获同步错误', error)
}
console.log('结束同步任务')

![在这里插入图片描述](https://img-blog.csdnimg.cn/bffb64d7626349059ce7f0f9009688c1.png

  • async 异步函数抛出的错误,经过 await 关键字处理后,会暂停异步函数后面的代码,使该异步函数以同步的方式执行,故可以被
    try/catch 语句捕获。
async function fn () {
  throw Error('出错了')
}
try {
  console.log('开始同步任务')
  await fn()
} catch (error) {
  console.log('try catch捕获同步错误', error)
}
console.log('结束同步任务')

在这里插入图片描述

关于 async/awaitPromise 的区别,另有一文介绍
【JavaScript】Promise和async/await的区别

实际应用

console.log('开始同步任务')
let loading = false
function getUser () {
  return new Promise((resolve, reject) => {
    setTimeout(reject, 1000, '出错了');
  })
}
try {
  loading = true
  const user = await getUser()
  loading = false
} catch (error) {
  // loading = false // 重要!!!重置loading
  console.log('try catch捕获同步错误', error, 'loading =', loading)
}
console.log('结束同步任务,loading =', loading)

在这里插入图片描述

console.log('开始同步任务')
let loading = false
function getUser () {
  return new Promise((resolve, reject) => {
    setTimeout(reject, 1000, '出错了');
  })
}
loading = true
let user = null
getUser().then(res => {
  loading = false
  user = res
}).catch(e => {
  loading = false // 重要!!!重置loading
  console.log('Promise catch捕获异步错误', e, 'loading =', loading)
})
console.log('结束同步任务,loading =', loading)

在这里插入图片描述

总结

  • try/catch 语句捕获同步任务产生的错误。
  • Promise catch() 方法捕获异步任务阐释的错误。
  • async 关键字声明的异步函数,在经过 await 关键字处理后,抛出的错误可以被 try/catch 语句捕获。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 18:55:53  更:2022-06-29 18:59:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:03:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码