Javascript — 异步方法与异常捕获问题

问题:try catch为什么不能捕获未被 await 修饰的异步方法异常

async function throwError() {throw new Error("自定义Error!")
}let testOne = async () => {console.debug("start testOne")try {throwError()} catch (e) {console.error("testOne 异常捕获")console.error(e)}
}testOne()let testTwo = async () => {console.debug("start testTwo")try {await throwError()} catch (e) {console.error("testTwo 异常捕获")console.error(e)}
}testTwo()

执行结果:

前提一:Promise 的状态以及常用方法

Promise 是一个可以处理异步操作的对象,Promise 包含三个状态;

  • pending(待定):初始状态
  • fulfilled(已兑现):操作成功
  • rejected(已拒绝):操作失败

Promise 的常用三个方法 then() 、catch()、 finally();

其中 then() 是 Promise 被兑现和拒绝时的回调函数,包含两个函数类型参数:

  • onFulfilled:Promise 对象被兑现时异步执行的函数。它的返回值将成为 then() 返回的 Promise 对象的兑现值。如果 onFulfilled 不是一个函数,则内部会被替换为一个恒等函数((x) => x)。
  • onRejected:Promise 对象被拒绝时异步执行的函数。它的返回值将成为 catch() 返回的 Promise 对象的兑现值。如果 onRejected 不是一个函数,则内部会被替换为一个恒等函数((x) => {throw x})。

其中 catch() 是 Promise 被拒绝时的回调函数,是 .then(undefined, rejected) 的简写形式。

其中finally() 是 Promise 被兑现或者拒绝之后执行的回调函数,可以用来处理一些在 then 和 catch中执行的重复性代码。

PS:如果一个被拒绝的 Promise 没有实现拒绝事件处理器(then()、catch()、finally()),则这个事件将会由环境来进行处理,比如浏览器等。

前提二:async 关键字

async 关键字用来修饰一个异步方法,异步方法中可以使用 await 关键字

前提三:await  关键字

await 操作符用于等待一个 Promise 兑现并获取它兑现之后的值。

结论

调用异步方法在没有使用 await 修饰的情况下 Promise 的结果没有被等待且给到当前的函数,这样 try catch 也无法捕获异常了。如果 Promise 实现了拒绝事件处理器,则这个事件转交由 Promise 的拒绝事件处理器处理了,那么 try catch 依然无法捕获这个异常。

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

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

相关文章

【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】

1 问题描述 Monkey跑出的无焦点窗口的ANR问题。 特点: 1)、上层WMS有焦点窗口,为Launcher。 2)、native层InputDispacher无焦点窗口,上层为”recents_animation_input_consumer“请求了焦点,但是”rece…

大话设计模式之简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,属于工厂模式的一种。在简单工厂模式中,有一个工厂类负责根据输入参数的不同来创建不同类的实例。 简单工厂模式包含以下几个要素: 1. **工厂类&#xff0…

太阳能发电园区3D可视化:揭秘绿色能源新纪元

在科技飞速发展的今天,绿色能源已成为推动社会进步的重要力量。太阳能发电作为绿色能源的重要代表,正在全球范围内掀起一股清洁能源的革命浪潮。 太阳能发电园区作为集中展示太阳能发电技术和应用的场所,其规模之大、设备之复杂,常…

ClickHouse03-小白如何快速搭建ClickHouse集群

普通测试通常使用ClickHouse单节点就可以了,但是生产环境不免需要考虑多活、负载等高可用问题,集群就成了基础需求 ClickHouse在集群的选择上,作者已知的有两种: 使用ZooKeeper作为节点协调的组件,使用ClickHouse-Kee…

算法---动态规划练习-7(按摩师)【类似打家劫舍】

按摩师 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址:点这里 2. 讲解算法原理 首先,给定一个整数数组 nums,其中 nums[i] 表示第 i 天的预约时间长度。 定义两个辅助数组 f 和 g,长度都为 n(n 是数组…

201基于matlab的成绩管理系统

基于matlab的成绩管理系统。自带的GUI界面设计了一个成绩管理界面,可进行成绩的载入、查询、绘图、求平均分。可更改自己的数据进行录入。包含作业文档。程序已调通,可直接运行。 201 matlab 成绩管理系统 GUI - 小红书 (xiaohongshu.com)

C语言函数的定义、声明、调用与返回

在C语言中,函数是一种模块化和结构化的编程方式,用于封装特定的功能和逻辑。通过函数,可以将程序分解成多个小的模块,使得程序结构更清晰、易于理解和维护。本文将深入介绍C语言中函数的定义、声明、调用与返回,以帮助…

git的使用日常习惯规范与一些特殊操作

git的使用日常习惯规范与一些特殊操作 操作习惯规范创建本地新分支,推送新分支到云端仓库1.创建一个本地的login分支2.创建新分支后切换到新分支3.推送新分支到云端 git的特殊操作撤回commit(取消提交到本地版本库的动作,本地工作区写的代码不…

基于单片机锂电池电量检测数码管显示系统设计

**单片机设计介绍,基于单片机锂电池电量检测数码管显示系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机锂电池电量检测数码管显示系统设计的主要目标是实时、准确地检测锂电池的电量,并…

uniapp中安装vant2

1.uniapp项目搭建 因为是安装vant2所以项目选择vue2,如果vue3项目的话安装vant3 2.安装vant npm i vantlatest-v2 3.在main.js文件引入挂载vant 说明:// #ifndef VUE3这里是vue2模板用来挂载注册组件的地方;// #ifdef VUE3这里是vue3模板…

数据结构学习——链表面试题

1. 删除链表中等于给定值 val 的所有结点。 203. 移除链表元素 - 力扣(LeetCode) 方法一: struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* prevNULL;struct ListNode* curhead;while(cur){if(cur-&…

海外媒体发稿:3种媒体宣发套餐内容推广方法

现如今,伴随着信息技术的不断进步和推广,新闻媒体宣发变成企业品牌推广的重要手段之一。为了方便让新闻信息新闻资讯传递给目标群体,公司一般会选择不同的套餐内容和推广方法。下面我们就详细介绍3种新闻资讯新闻媒体宣发套餐内容推广方法。 …

C# 操作 Word 全域查找且替换(含图片对象)

目录 关于全域查找且替换 Word应用样本 SqlServer数据表部分设计样本 范例运行环境 配置Office DCOM 设计实现 组件库引入 实现原理 查找且替换的核心代码 窗格内容 页眉内容 页脚内容 形状内容 小结 关于全域查找且替换 C#全域操作 Word 查找且替换主要包括如下…

【Java】ArrayList数组的扩容机制 jdk1.8

📝个人主页:哈__ 期待您的关注 ArrayList和普通数组不同,ArrayList支持动态扩容,那么ArrayList到底是如何扩容的呢?你又是否知道ArrayList数组的初始长度是多少呢? 在开始介绍之前,我们要先介…

【Python】如何安装Python

推荐安装python39版本 1.安装python1.1.在任意盘新建Python39目录1.2.双击安装包1.3.安装成功后,WINRcmd进入dos页面,输入 python,即可查看是否安装成功 2.环境变量配置2.1.打开 我的电脑-》高级系统设置-》环境变量-》系统变量2.2.如上图配置…

MHA高可用集群部署

一、MHA的概念 1.1 MHA概述 一套优秀的MySQL高可用环境下故障切换和主从复制的软件MHA的出现就是解决MySQL 单点的问题。 MySQL故障过程中,MHA能做到0-30秒内自动完成故障切换MHA能在故障切换的过程中最大程度上保证数据的一致性以达到真正意义上的高可用 …

​如何用“Dreamina”进行文生图​

文生图,顾名思义,就是用文字描述来生成图片。近年来,随着人工智能技术的进步,文生图技术也逐渐成熟,并逐渐应用于各种领域,例如设计、创作、娱乐等等。 本文将介绍如何使用“Dreamina”进行文生图。 步骤…

2024.3.25-26记:二叉树的遍历

二叉树的遍历深度优先遍历(DFS)递归遍历前序递归遍历:中序递归遍历后续递归遍历 非递归遍历前序非递归遍历中序非递归遍历后续非递归遍历 宽度优先遍历(BFS): 二叉树的遍历 二叉树遍历大体上分为深度优先遍历(DFS)和宽度优先遍历(BFS)&#…

Linux 常用命令(1)

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:Linux 随笔集合 …

必应bing国内广告推广怎么做,烧不烧钱?

必应Bing作为全球领先的搜索引擎之一,其国内广告平台提供了丰富而精准的广告资源,为众多企业带来极具性价比的品牌推广机会。然而,要想在必应Bing上取得理想的广告效果,并不一定意味着“烧钱”,而是需要通过科学的策略…