给所有的async函数添加try/catch

news2024/9/27 17:24:05

async 如果不加 try/catch 会发生什么呢?下面让我们看个例子

async function fn() {
  let value = await new Promise((resolve, reject) => reject('报错'))
  console.log('do something...')
}
fn()

导致浏览器报错:一个未捕获的错误,并且下面的代码不执行  

那么在开发过程中,为了保证系统、代码的健壮性,或是为了捕获异步的错误,需要频繁的在async函数中添加 try/catch,避免出现上述示例的情况 

但是程序猿是越来越懒的,不想一个个加,懒惰是我们进步 

自然有大佬开发了出了babel开发时依赖插件babel-plugin-await-add-trycatch,我们直接使用就可以了,也很方便,况且我们现在也都是站在巨人肩膀上的,没必要重复造轮子,当然也可以看下该插件源码感兴趣可以研究一下,下面介绍一下该插件的使用

babel-plugin-await-add-trycatch 

一个自动给 async/await 函数添加 try/catch 的 babel 插件 

npm地址:https://www.npmjs.com/package/babel-plugin-await-add-trycatch 

 安装

npm install --save-dev babel-plugin-await-add-trycatch
or
pnpm add babel-plugin-await-add-trycatch -D

使用说明 

babel.config.js 配置如下 

module.exports = {
  plugins: [
    [
      require('babel-plugin-await-add-trycatch'),
      // 可选配置项
      {
        // exclude: ['build', 'node_modules'], // 默认值 ['node_modules']
        // include: ['main.js','views/**/*.vue'], // 默认值 []
        // customLog: 'My customLog' // 默认值 'Error'
      }
    ]
  ]
};

当我们使用了之后,平时开发中就不需要自己手动添加try/catch了,它会自动帮我们添加到async函数中去,如果自己写了try/catch,则按照我们的,不会去重写,同样的下面这段儿代码

执行,浏览器打印看下: 

大家注意一下,我们通过该插件添加try/catch,它是不会执行下面的代码的,就是我上面示例中的console.log('do something...') 是没有打印的,但是如果我们手动添加try/catch,是会打印的。

通过该插件可以让我们少些一些代码,但是async函数中出错的时候,下面的代码不会执行这个问题也得了解,但是控制台的打印出的捕获到的信息可以让我们快速的找到目标文件和具体的报错方法,方便去定位问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring定时器会初始化两次终于找到原因了!!!

使用idea编译器中的Tomcat时写在逻辑业务层的定时器会执行两次,最开始我认为是Tomcat的问题,后面做了个测试在出现该现象的业务层类中定义了一个测试定时器方法: Scheduled(cron "0/5 * * * * ?") //每隔5秒执行一次这个方法pub…

华为再次入选2022年Gartner® SIEM魔力象限

近日,全球IT研究与顾问咨询机构Gartner正式发布《Magic Quadrant™ for Security Information and Event Management》报告,全球共有16家厂商入选了Gartner SIEM魔力象限,华为凭借HiSec Insight和华为云安全云脑技术能力进入了Gartner SIEM魔…

javascript中this的指向问题

this的五种绑定问题 1,默认绑定 默认绑定通常是指函数独立调用,不涉及其他绑定规则。 非严格模式下,this指向window严格模式,下,this指向undefined. 在普通函数内部的thislet/const定义的变量存在暂时性死区,而目不…

elk实践

1、背景 鉴于现在项目中的日志比较乱,所以建议使用现在较为流行的elk收集日志并展示; 2、下载、配置与启动 在下载 Elastic 产品 | Elastic 官网下载filebeat、logstash、elasticSearch、kibana 版本要一致 本人测试用的7.14 mac版本 实际生产使用7.14…

甘特图来搞定跨部门协作难的问题!项目经理必备

在很多大的工程项目、IT项目、市场项目中,都会涉及诸多对人员、时间、质量等的控制,这往往需要跨部门协作。但目前大多数企业跨部门协作还是通过微信、口口相传的方式进行,也导致了以下这些问题的频现: 辗转多个群聊提取有用的信息…

笔试强训(三十九)

目录一、选择题二、编程题2.1 字符串计数2.1.1 题目2.1.2 题解一、选择题 (1)/etc/resolv.conf的用途是(C) A.邮件服务的配置文件 B.DHCP的设置文件 C.DNS解析的设置文件 D.网络路由的设置文件 (2)能够pin…

Redis 通用指令

文章目录一、key通用指令1-1 基本操作1-2 时效性控制1-3 查询操作1-4 扩展操作二、数据库通用指令提示:以下是本篇文章正文内容,Redis系列学习将会持续更新 一、key通用指令 ● 特征:key是一个字符串,通过key获取redis中保存的数…

警惕 “格机软件” 格式化手机全字库..不要轻易给不明觉厉的软件给root权限

以前的玩机界中有【锁机】软件。就是你安装一个软件后他会锁住屏幕。导致你无法操作手机。屏幕出现QQ联系方式等 勒索钱财。目前刷机界中的【格机】更胜一筹,直接格式化你手机全部分区没商量............ 警惕:不要给不明觉厉的软件 模块 刷机包等等给r…

Flink的状态持久化和状态后端

状态持久化 检查点的保存离不开 JobManager 和 TaskManager,以及外部存储系统的协调。在应用进行检查点保存时,首先会由 JobManager 向所有 TaskManager 发出触发检查点的命令;TaskManger 收到之后,将当前任务的所有状态进行快照保…

搭建自己Kindle电子书图书馆,并可远程访问

在电子书风靡的时期,大部分人都购买了一本电子书,虽然这本电子书更多的时候是被搁置在储物架上吃灰,或者成为盖泡面的神器,但当亚马逊发布消息将放弃电子书在中国的服务时,还是有些令人惋惜,毕竟谁也不想大…

【虾神白话空间统计】笔记:置信度、零假设、PZ值、随机分布

以下内容摘录节选学习自虾神专栏 很重要的一个概念:在空间统计中,随机和均匀经常是一个意思 一个随机抽样的例子 新版白话空间统计(9):置信度的初探 这里面讲经研究,有72%的男生喜欢打篮球,…

【Vue】基础语法(创建项目|数据绑定|事件绑定|声明方法|插值表达式|属性值绑定|循环数组|v-if控制||计算属性|监听器|过滤器)

文章目录1. Vue 思想:2. VUE 的基本使用2.1 创建项目并进行基础测试2.2 数据绑定2.3 事件绑定2.4 声明方法2.5 插值表达式2.6 给任意属性绑定值2.7 v-for 循环数组或对象的使用2.8 v-if 和 v-show 控制是否显示2.9 计算属性和监听器属性2.10 过滤器属性3. 总结 Vue …

智慧工程安监物联网+云平台解决方案-最新全套文件

智慧工程安监物联网云平台解决方案-最新全套文件一、建设背景监管部门所处困境建筑施工业存在难点工程现场安全现象二、建设思路实现目标三、建设方案四、获取 - 物联网全套最新解决方案合集一、建设背景 智慧工地 是指运用 信息化 手段,通过 三维 设计平台对 工程…

Linux发行版---常用命令操作快速熟悉

针对linux发行版(如ubuntu、raspian等)的基础使用说明,以快速熟悉linux发行版的操作。 一、系统信息 查看处理器架构:arch查看内核版本:cat /proc/version; uname -a查看操作系统版本:head -n 1 /etc/iss…

c语言:初识结构体

初识结构体一.结构体声明1.结构体的概念2.声明二.结构体的基础使用三.结构体变量的定义和初始化一.结构体声明 1.结构体的概念 结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 这里与数组做出区分:数组是一组相同类型元…

上海 Meetup | 一键获取 11 大云原生热门开源项目技术分享入场券

活动介绍 微服务 x 容器开源开发者 Meetup 是由阿里云飞天 club 与云原生应用平台共同打造,面向一线开发者的技术交流活动,整体内容聚焦容器 & 微服务方向,旨在通过热门的开源技术、云原生在企业的应用实践案例、架构设计思维等&#xf…

CopyOnWriteArrayList 是如何保证线程安全的?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 在上一篇文章里,我们聊到了ArrayList 的线程安全问题,其中提到了 CopyOnWriteArrayList 的解决方法。那么 CopyOn…

倒计时9天|Zabbix中国峰会15位重磅嘉宾抢先看!

2022Zabbix峰会演讲嘉宾 (有奖互动:转发本文或任一讲师海报至朋友圈,保留5分钟,即可获得Zabbix定制周边礼品一份,仅限100份,先到先得,详情联系文末小Z) 第7届Zabbix中国峰会将于12月2-3日举行…

腾讯产品经理的自动化工作流

作为腾讯产品经理的一员,Johnny中扬每天需要面对来自各方繁琐的需求。如何管理好用户需求、并及时规划、完成、反馈,上周中扬和我们分享了他的工作流。如果你也是产品经理,或者对腾讯产品经理的工作日常比较感兴趣,错过了上次的直…

【数据结构】堆的实现

堆1.堆:一种二叉树2.堆的概念及结构3.堆的实现3.1 创建堆的结构3.2 堆的初始化3.3 堆的插入3.4 堆的向上调整法(up)3.5 打印堆的数据3.6 到这里就可以实现一个基本的堆了3.7 向下调整法down(非常重要的一个方法)3.8 最…