js中try...catch捕捉错误

文章目录

  • 一、前言
  • 二、场景
    • 2.1、`setTimeout`
    • 2.2、`Promise`
  • 三、最后

一、前言

说到try...catch都觉得非常熟悉了,不就是用来捕捉代码块中的错误嘛,平时也用得比较多的

二、场景

try...catch只能捕捉到同步执行代码块中的错误

2.1、setTimeout

try {
  setTimeout(() => {
    throw new Error('err')
  }, 200);
} catch (err) {
  console.log(err);
}

JavaScript中,setTimeout是一个异步函数,它的回调函数会在指定的延时后被放入事件队列,等待当前执行栈清空后才执行。因此,当setTimeout的回调函数执行并抛出错误时,try...catch已经执行完毕,无法捕捉到异步回调中的错误。

正确的做法是在异步操作中直接处理错误,例如使用回调函数、Promise或者async/await结合try...catch

new Promise((resolve, reject) => {
  setTimeout(() => {
    try {
      throw new Error('err');
    } catch (err) {
      reject(err);
    }
  }, 200);
})
  .then(() => {
    // 正常执行时的处理逻辑
  })
  .catch((err) => {
    console.log(err); // 这里会捕捉到错误
  });

2.2、Promise

try {
  Promise.resolve().then(() => {
    throw new Error('err')
  })
} catch (err) {
  console.log(err);
}

尝试使用try...catch来捕捉一个在Promise链中抛出的错误。这种方式同样是无效的,因为try...catch不能捕捉到在Promise链中的异步错误。

Promise对象用于表示一个异步操作的最终完成(或失败),及其结果值。一个Promise的状态可能是以下几种:

  • Pending(等待态) :初始状态,既不是成功,也不是失败状态。
  • Fulfilled(成功态) :意味着操作成功完成。
  • Rejected(失败态) :意味着操作失败。

Promise中抛出一个错误(例如通过throw语句)会导致Promise被拒绝(或失败)。要正确处理这个错误,需要在Promise链中使用.catch方法或者在一个async函数中使用try...catch

// 方法一
Promise.resolve()
  .then(() => {
    throw new Error('err');
  })
  .catch((err) => {
    console.log(err); // 这里会捕捉到错误
  });

// 方法二
async function handleError() {
  try {
    await Promise.resolve().then(() => {
      throw new Error('err');
    });
  } catch (err) {
    console.log(err); // 这里会捕捉到错误
  }
}

handleError();

三、最后

本人每篇文章都是一字一句码出来,希望对大家有所帮助,多提提意见。顺手来个三连击,点赞👍收藏💖关注✨,一起加油☕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/318394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LabVIEW FPGA入门】没有CompactRIO时进行编程测试

1.新建一个空白项目。 2.新建cRIO终端。 要添加仿真的远程实时目标,请选择项目名称,右击并选择新建>>目标和设备(Targets and Devices)。 3.新建终端和设备,选一个cRIO型号 接下来,当添加目标和设备窗口出现时,请…

第 2 课 ROS 系统安装和环境搭建

第 2 课 ROS 系统安装和环境搭建 1.版本选择 不同的 Ubuntu 安装的 ROS 版本不同,其中 Ubuntu18.04 的 ROS 对应版本为Melodic。 Ubuntu版本ROS版本Ubuntu16.04KineticUbuntu18.04MelodicUbuntu20.04Noetic 2.检查 Ubuntu 的软件和更新源 找到系统中的“软件和…

Python+Django+MySQL的图书馆管理系统【附源码,运行简单】

PythonDjangoMySQL的图书馆管理系统【附源码,运行简单】 总览 1、《图书馆管理系统》1.1 方案设计说明书设计目标需求分析工具列表 2、详细设计2.1 登录2.2 注册2.3 程序主页面2.4 图书新增界面2.5 图书信息修改界面2.6 其他功能贴图 3、下载 总览 自己做的项目&am…

mysql从入门到放弃之数据库体系结构与管理

文章目录 前言一、体系结构1、mysql c/s结构介绍2、mysql实例组成3、mysqld程序运行原理3.1、mysqld守护进程结构3.2、 引入sql语句结构化的查询语言3.3、探索一条SQL语句的执行过程 二、mysql逻辑存储结构三、mysql物理存储结构3.1、innodb存储引擎的段、区、页之间的关系 四、…

YZ虚拟资源下载源码-支持对接公众号-对接支付

这款系统内置的模板是电脑系统下载站的类型,当然你也可以用作其他类型,例如软件下载,其他类型的资源下载,知识付费下载等,改下文字内容即可。 支持商城系统,后台可配置支付。青狐修改增加了很多可用性。 …

C++学习笔记(十九)

一、vector容器 1. vector基本概念 功能:vector数据结构和数组非常相似,也称为单端数组 vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展 动态扩展:并不是在原空间之后续接新空间&#xff…

VMware 安装及创建一个 CentOS Stream 的详细指南

文章目录 1. 简介2. 下载和安装1)通过官网安装2)通过电脑管家安装 3. 下载操作系统镜像包4. 创建虚拟机结语 1. 简介 在过去,服务器通常是运行单一操作系统和应用程序的物理设备。这就导致了硬件资源浪费和管理复杂性的增加。为了解决这些问…

注册中心--zookeeper 安装并启动

zookeeper 安装/启动 注册中心--zookeeper安装步骤zookeeper常用命令 注册中心–zookeeper zookeeper官方下载地址 最早由雅虎开发,用来解决分布式系统中的一致性问题。功能:包括配置管理、集群的扩容和缩容、分布式锁等等。 安装步骤 1)…

C++学习笔记(二十八):c++ 静态库及动态库的使用

静态库的使用 库的使用会很大程度减少我们的工作,本节对c中静态库和动态库的使用进行简单的介绍。静态链接库意味着这个库会被放到可执行文件中,在生成的exe中。动态链接库是在程序运行时链接的,可以在程序运行时调用加载库函数的方法来实现&…

Java项目:07 Springboot的客户管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot客户管理系统 功能模块:登录修改密码客户列表充值列表消费记录客户类型 环境:IDEAjdk1.8Tomcat9MySQL5.7maven3.6…

基于Matlab/Simulink开发自动驾驶的解决方案

文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶,能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能,从而推进自动驾驶感…

linux安装系统遇到的问题

这两天打算攻克下来网络编程,发现这也确实是很重要的一个东西,但我就奇了怪了,老师就压根没提,反正留在我印象的就一个tcp/ip七层网络。也说正好,把linux命令也熟悉熟悉,拿着我大一课本快速过过 连接cento…

AI大模型学习笔记一

一、商业观点:企业借助大模型获得业务增长可能 二、底层原理:transformer 1)备注 ①下面每个步骤都是自回归的过程(aotu-regressive):已输出内容的每个字作为输入,一起生成下一个字 ②合起来就…

服务器IP如何隐藏

说到 IP 地址,它足以作为服务器的定位标志,算是在互联网上的名片。因此,当一些黑客攻击服务器时,IP 地址便会成为首要目标。为保护服务器避免受到潜在的攻击和侦察,隐藏服务器的真实 IP 地址是一项重要的措施。 服务器…

花了三天的时间做了一个多功能 AI 助手

嗨!我是团子,大家新年快乐呀~ 前几天看到一些好朋友在朋友圈晒自己的年度总结,立新年 Flag,看到大家一年满满的收获,再看看自己,不由得想再看看人家,然后再看看自己,然后再看看人家…

Android-基础

Activity生命周期 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当…

seata分布式事务(与dubbo集成)

1.seata是什么? Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional:全局事务注解,添加了以后可实现分布式事务的回滚和提交,用法与spring…

数据分析-Pandas如何重塑数据表

数据分析-Pandas如何重塑数据表 数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择Titanic数据&…

FreeRTOS 学习相关笔记 附C语言内容补充

学习视频为【正点原子】手把手教你学FreeRTOS实时系统 文章目录 RTOS 入门裸机RTOSFreeRTOS任务调度方式任务状态 FreeRTOS 移植系统配置文件 API函数任务创建和删除动态方式创建任务静态方式创建任务删除任务 任务挂起和恢复函数调度器挂起与恢复临界区任务调度器的挂起和恢复…

anoconda 安装报错

表现形式:Output folder: D:\anoconda\Lib Extract: _nsis.py Extract: _system_path.py Output folder: D:\anoconda........................ 解决办法: 网址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Sour…