前端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 worldconsole.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.mzph.cn/news/681695.shtml

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

相关文章

Spring Boot3自定义异常及全局异常捕获

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 目的 主要步骤 定义自定义异常类 创建全局异常处理器 手动抛出自定义异常 前置条件 已经初始化好一个…

vue 获取 form表格 的值 的方法

vue 获取 form表格 的值 代码 let discountLastMoney this.form.getFieldValue(discountLastMoney)-0

格式化字符串的简单学习

文章目录 Format String格式化字符串函数格式化字符串参数原理 这几天学的少,过完年就一直在走亲戚(现在看到肉就犯恶心 Format String 格式化字符串函数可以接受可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之…

[Python进阶] 识别验证码

11.3 识别验证码 我们再开发某些项目的时候,如果遇到要登录某些网页,那么会经常遇到输入验证码的情况,而每次人工输入验证码的话,比较浪费时间。于是,可以通过调用某些接口进行识别。 11.3.1 调用百度文字识别接口 …

中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第一套(阅读程序题)

CCF认证CSP-J入门组模拟测试题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff1b;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40分) 第一题 1 #include<iostream> 2 using namespace std; 3 int a,b,c; 4 int main…

【C++】内存五大区详解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Kotlin基本语法1到函数

1.range表达式 fun main() {var age 12.3if (age in 0.0..3.3){println("婴幼儿")}else if (age in 4.0..12.2){println("少儿")}else{println("未知")}/*** in 后面还可以接 list set 都可以*/if (age !in 0.0..3.3){println("婴幼儿&quo…

UE4运用C++和框架开发坦克大战教程笔记(十八)(第55~57集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十八&#xff09;&#xff08;第55~57集&#xff09; 55. UI 进入退出动画HideOther 面板出现时隐藏其他面板添加面板出现和收起的动画效果编写遮罩管理器前的准备 56. 弹窗进入界面57. UI 显示隐藏与遮罩转移完善遮罩管理器 55…

【C++】static静态关键字

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

C# CAD2016 多边形顶点按方向重新排序

多边形顶点按方向重新排序 初始化多边形顶点集合 outerPoints 创建一个名为 outerPoints 的 List<Point2d>&#xff0c;用于存储多边形的所有顶点坐标。 计算多边形顶点集合的边界框&#xff08;BoundingBox&#xff09; 使用LINQ的Aggregate方法遍历整个outerPoints列表…

【C++】中的 inline 用法

1、引入 inline 关键字的原因 在 c/c 中&#xff0c;为了解决一些频繁调用的小函数大量消耗栈空间&#xff08;栈内存&#xff09;的问题&#xff0c;特别的引入了 inline 修饰符&#xff0c;表示为内联函数。 栈空间就是指放置程序的局部数据&#xff08;也就是函数内数据&a…

SpringBoot+Vue3 完成小红书项目

简介 该项目采用微服务架构&#xff0c;实现了前后端分离的系统设计。在前端&#xff0c;我们选择了 Vue3 配合 TypeScript 和 ElementUi 框架&#xff0c;以提升开发效率和用户体验。而在后端&#xff0c;则是运用 SpringBoot 和 Mybatis-plus 进行开发&#xff0c;保证了系统…

使用word2vec+tensorflow自然语言处理NLP

目录 介绍&#xff1a; 搭建上下文或预测目标词来学习词向量 建模1&#xff1a; 建模2&#xff1a; 预测&#xff1a; 介绍&#xff1a; Word2Vec是一种用于将文本转换为向量表示的技术。它是由谷歌团队于2013年提出的一种神经网络模型。Word2Vec可以将单词表示为高维空间…

JS逆向进阶篇【去哪儿旅行登录】【上篇】

目标url: aHR0cHM6Ly91c2VyLnF1bmFyLmNvbS9wYXNzcG9ydC9sb2dpbi5qc3A 实现难点&#xff1a; 逆向滑块请求发送短信登录 目录 每篇前言&#xff1a;0、前置技术栈&#xff08;1&#xff09;JS实现页面滑动&#xff08;2&#xff09;JS实现记录滑动轨迹&#xff08;3&#xff…

SAP MM学习笔记42 - 特殊调达流程 - 受托品(寄售)

上一章讲了 外注加工的知识。 详细可以参考如下链接。 SAP MM学习笔记41 - 特殊调达流程 - 外注加工-CSDN博客 咱们继续学习特殊调达流程。 本章主要讲受托品。 1&#xff0c;什么是受托品 &#xff08;寄售&#xff09; 仕入先提供的商品&#xff0c;商品是放在你公司了&a…

一周学会Django5 Python Web开发-Django5 Hello World编写

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计14条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

文章目录 8.1 性能评估工具 - 你的性能探测仪8.1.1 基础知识8.1.2 重点案例&#xff1a;使用 VisualVM 监控应用性能8.1.3 拓展案例 1&#xff1a;使用 JProfiler 分析内存泄漏8.1.4 拓展案例 2&#xff1a;使用 Gatling 进行 Web 应用压力测试 8.2 JVM 调优 - 魔法引擎的调校8…

智能汽车行业产业研究报告:4D成像毫米波雷达—自动驾驶最佳辅助

今天分享的是智能汽车系列深度研究报告&#xff1a;《智能汽车行业产业研究报告&#xff1a;4D成像毫米波雷达—自动驾驶最佳辅助》。 &#xff08;报告出品方&#xff1a;开源证券&#xff09; 报告共计&#xff1a;43页 视觉感知最佳辅助——4D 成像毫米波雷达 感知是自动…

【Python】window环境使用venv部署jupyter notebook

基础信息 执行winr&#xff0c;在输入框输入powershell: python版本&#xff1a;python -v 创建并激活虚拟环境 1、进入要创建虚拟环境的目录&#xff0c;操作示例如下&#xff1a; PS C:\Users\Administrator> cd D:\Python\weltest 2、创建虚拟环境&#xff0c;操作示…