前端JavaScript篇之await 在等待什么呢?async/await 如何捕获异常

目录

  • await 在等待什么呢?
  • async/await 如何捕获异常


await 在等待什么呢?

await 关键字实际上是等待一个表达式的结果,这个表达式的计算结果可以是 Promise 对象或者其他值。如果 await 后面的表达式不是 Promise 对象,那么 await 表达式的运算结果就是它等到的东西;如果 await 后面的表达式是 Promise 对象,那么 await 会阻塞后面的代码,等待 Promise 对象的状态变化,然后得到 Promise 对象 resolved 的值,作为 await 表达式的运算结果。

下面是一个使用 await 等待普通函数调用的示例代码:

function getSomething() {
  return 'something'
}

async function test() {
  const result = await getSomething()
  console.log(result)
}

test()

请添加图片描述

在上面的代码中,我们定义了一个普通函数 getSomething(),它会返回一个字符串。然后我们定义了一个异步函数 test(),在函数内部使用 await 关键字等待 getSomething() 函数的返回值,并将其赋值给变量 result,然后打印出 result 的值。

需要注意的是,await 关键字只能在异步函数内部使用,如果在同步函数内部使用 await 关键字会导致语法错误。同时,在使用 await 关键字时需要注意避免出现死循环和阻塞主线程的问题,以免影响程序的性能和稳定性。

下面是一个使用 await 等待 Promise 对象的示例代码:

function testAsy(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x)
    }, 3000)
  })
}

async function testAwt() {
  let result = await testAsy('hello world')
  console.log(result) // 3秒钟之后出现hello world
  console.log('cuger') // 3秒钟之后出现cuger
}

testAwt()
console.log('cug') // 立即输出cug

请添加图片描述

在上面的代码中,我们定义了一个异步函数 testAsy(),它会返回一个 Promise 对象,这个 Promise 对象会在 3 秒钟后 resolve,并将参数 x 作为 resolve 的值。然后我们定义了一个异步函数 testAwt(),在函数内部使用 await 关键字等待 testAsy() 函数返回的 Promise 对象的状态变化,并将其 resolved 的值赋值给变量 result,然后打印出 result 的值和字符串 cuger。最后我们调用 testAwt() 函数,并在函数外部打印出字符串 cug

需要注意的是,testAwt() 函数会在等待 testAsy() 函数返回的 Promise 对象的过程中被阻塞,直到 Promise 对象的状态变为 resolved,然后才会继续执行后面的代码。因此,在调用 testAwt() 函数之后,会先输出字符串 cug,然后等待 3 秒钟之后才会输出字符串 hello worldcuger

async/await 如何捕获异常

使用 async/await 可以像同步代码一样使用 try…catch 块来处理可能出现的异常。在异步函数中使用 try…catch 块时,需要将可能出现异常的代码放在 try 代码块中,然后在 catch 代码块中处理异常,如下所示:

async function fetchData() {
  try {
    const response = await fetch('https://example.com/data')
    const data = await response.json()
    console.log(data)
  } catch (error) {
    console.error('Error fetching data:', error)
  }
}

在上面的代码中,fetchData 是一个异步函数,使用 try…catch 块来处理可能出现的异常。在 try 代码块中,我们使用 await 关键字来等待 fetch 请求和 json 解析完成,如果出现异常,会被 catch 代码块捕获并打印错误信息。

需要注意的是,如果在异步函数中使用 try…catch 块来捕获异常,只能捕获到异步函数内部的异常,如果异步函数外部的代码出现异常,需要在调用异步函数的代码中使用 try…catch 块来处理异常。

持续学习总结记录中,回顾一下上面的内容:
在async/await中,await关键字用于等待一个Promise对象的解析结果。它会暂停当前函数的执行,直到Promise对象被解析(即状态变为resolved)并返回结果。
使用try-catch语法可以捕获async/await中的异常。当await关键字等待的Promise对象发生错误(状态变为rejected),它会抛出一个异常。我们可以使用try块来包裹await语句,并使用catch块来捕获这个异常,然后进行相应的错误处理。
总结起来,await用于等待Promise对象的解析结果,而捕获异常则通过使用try-catch语法来实现。这样我们可以优雅地处理异步操作的结果和异常情况。

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

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

相关文章

论文阅读-Pegasus:通过网络内一致性目录容忍分布式存储中的偏斜工作负载

论文名称:Pegasus: Tolerating Skewed Workloads in Distributed Storage with In-Network Coherence Directories 摘要 高性能分布式存储系统面临着由于偏斜和动态工作负载引起的负载不平衡的挑战。本文介绍了Pegasus,这是一个利用新一代可编程交换机…

CTFshow web(php命令执行 68-71)

web68 还是那句话,没看到flag在哪,那就优先找到flag位置 这里cvar_dump(scandir("/")); 直接输出根目录的位置,然后查看源代码,发现flag位置为flag.txt 知道flag在根目录下面的flag.txt直接访问就好了 cinclude(/flag…

【开源】JAVA+Vue.js实现农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理:2.2.2 位置信息管理:2.2.3 配送人员分配:2.2.4 路线规划:2.2.5 个人中心:2.2.6 退换快递处理:…

Zig、C、Rust的Pk1

Zig、C、Rust的Pk1 github.com上看到“A basic comparitive analysis of C, C, Rust, and Zig.”:https://github.com/CoalNova/BasicCompare/tree/main 里边的代码是9个月之前的,用现在的zig 0.11.0 及0.12-dev都无法通过编译(具体为:zig-w…

快速搭建PyTorch环境:Miniconda一步到位

快速搭建PyTorch环境:Miniconda一步到位 🌵文章目录🌵 🌳一、为何选择Miniconda搭建PyTorch环境?🌳🌳二、Miniconda安装指南:轻松上手🌳🌳三、PyTorch与Minic…

langchain==win11搭建使用GPU

annaconda安装Python 3.11.7 下载代码: GitHub - chatchat-space/Langchain-Chatchat: Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM)…

适用于Android 的 7 大短信恢复应用程序

对于 Android 用户来说,丢失重要的短信可能是一种令人沮丧的体验。幸运的是,有许多短信恢复应用程序可以帮助恢复丢失或删除的短信。在本文中,将与您分享 7 个最佳短信恢复应用程序,并帮助您找到可用于恢复已删除消息的最佳应用程…

医院排队叫号系统的设计与实践

随着医疗服务需求的增加,医院排队叫号系统成为了现代医院管理的必备工具。它不仅可以提高医院服务效率,减少患者等待时间,还可以优化医院资源利用,提升患者就诊体验。本文将介绍医院排队叫号系统的设计与实践,包括系统…

2.13学习总结

1.出差(Bleeman—ford)(spfa) (dijkstra) 2.最小生成树(prim)(Kruskal) 最短路问题: 出差https://www.luogu.com.cn/problem/P8802 题目描述 AA …

MySQL:常用指令

MySQL官网 一、在Windows 系统 cmd窗口里执行的命令 启动:net start MySQL停止:net stop MySQL卸载:sc delete MySQL 二、在macOS系统终端里执行的命令 启动:mysql.server start停止:mysql.server stop重启:mysql.server restart 三、执行帮…

多尺度神经网络新一代创新!精度与速度完美平衡,实现多领域应用落地

多尺度神经网络的设计通常基于对频率原则的理解,目的是为了解决高频成分学习慢的问题。这些网络通过特殊设计,比如给高频成分加更多的权重或者将高频成分平移到低频,来提高学习效率。 为了满足在不同层次上理解和处理数据的需求,…

JS游戏项目合集【附源码】

文章目录 一:迷宫小游戏二:俄罗斯方块三:压扁小鸟 一:迷宫小游戏 【迷宫游戏】是一款基于HTML5技术开发的游戏,玩法简单。玩家需要在一个迷宫中找到出口并成功逃脱,本项目还有自动寻路(Track&a…

【开源】JAVA+Vue.js实现城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统,支持…

Netty应用(九) 之 编解码器概念 Netty常见的编解码器

目录 22.编解码器 22.1 编解码的概念 22.2 netty中的编解码 22.3 序列化 23.编解码器在使用过程中的两部分核心内容 23.1 序列化协议(编码格式)(传输数据的格式) 23.1.1 Java默认的序列化与反序列化 23.1.2 XML的序列化与反…

比特币突破5万美元,2年来首次

作者:秦晋 2月13日凌晨,时隔两年,比特币首次突破50000美元关口。最高触及50363美元、24小时涨幅3.53%。创下2021年12月以来的新高。 据《财富》报道,本次上涨得益于三方面,首先是比特币ETF资金流入,比特币E…

docker 2:安装

docker 2:安装 ‍ ubuntu 安装 docker sudo apt install docker.io‍ 把当前用户放进 docker 用户组,避免每次运行 docker 命都要使用 sudo​ 或者 root​ 权限。 sudo usermod -aG docker $USER​id $USER ​看到用户已加入 docker 组 ​​ ‍ …

单例模式 C++

6 种 单例 的手写,都是懒汉(饿汉代码在 “懒汉 / 饿汉的区别”) 目录 ✊前言 🌼GPT解析 🌼概念解析 RAII 懒汉 / 饿汉的区别 特点 举例 单例 -- 伪代码 适用场景 单例 -- 实现方式 优缺点 🎂手…

JavaScript 的ArrayBuffer 和二进制数组

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 ​ ✨ 正文 简介 在 JavaScript 中,ArrayBuffer 对象代…

Java学习-常用API-新增时间

1.学习JDK8新增时间的原因? 2.JDK8新增了那些时间? 代替calendar的 localDate localTime localDateTime 常用APi及代码示例: ZoneIdZonedDateTime 常用方法 代码示例: 代替Date的 Instant常见方法及其代码示例: 注…

GEE:CART(Classification and Regression Trees)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…
最新文章