位置: IT常识 - 正文

async/await详解(async/await原理)

编辑:rootadmin
async/await详解

推荐整理分享async/await详解(async/await原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:async await的作用,async await的理解,async await详解,async-await,async await的作用,async await的作用,async await详解,async-await,内容如对您有帮助,希望把文章链接给更多的朋友!

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。 💫系列专栏:vue3从入门到精通 📝个人签名:不破不立

🍬本文目录🥙一、简介🥪二、async🌮三、await🍔四、案例🥪附:直接量/字面量🥙一、简介

async/await是ES20717引入的,主要是简化Promise调用操作,实现了以异步操作像同步的方式去执行,async外部是异步执行的,同步是await的作用。

🥪二、async

async,英文意思是异步,当函数(包括函数语句、函数表达式、Lambda表达式)前有async关键字的时候,并且该函数有返回值,函数执行成功,那么该函数就会调用Promise.resove()并隐式的返回一个Promise对象;如果函数执行失败就会调用Promise.reject()并返回一个Promise对象。

async/await详解(async/await原理)

Promise.resolve(x) 可以看作是 new Promise(resolve => resolve(x)) ,可将字面量对象或其他对象快速封装成 Promise 实例

async函数中如果有异步操作会进行等待,但是async函数本身会马上返回,不会阻塞当前线程。async函数被调用不会阻塞界面渲染,内部由await关键字修饰异步过程,会阻塞等待异步任务的完成再返回。如果在函数中return一个直接量,async会把这个直接量通过Promise.resolve(直接量) 封装成 Promise 对象 ,如果没有返回值,相当于返回了Promise.resolve(undefined)。通过Promise回调得到async函数的返回值 ,通过Promise回调得到async函数的返回值,因为该函数返回的是Promise对象async func(){ return "a"}console.log(func())func().then(res=>{ console.log(res) //通过回掉获取到 a }.catch(err=>{ }))

func()的返回值如下,由此可见返回的是一个Promise对象。

🌮三、await使用await时,一定要配合async使用 ,这样才能使异步代码同步化,await英文为等待,意思就是等待await后面的函数(该函数返回的是Promise对象)执行完之后,在之后后面的代码。await后面也可以跟同步代码 ,这样做的话意义不大,增加了系统处理逻辑,系统会自动将其转化成一个Promsie对象。比如:const a = await '1';const a = await Promise.resolve('1');//跟上面效果效果相同//await后跟同步代码,不如不使用await,增加了代码逻辑,没有意义const a = '1';

await在等返回值,后面可以是字面量或者函数表达式。如果表达式的运算结果不是Promise对象,那么该结果就是await等的值; 如果await后是一个Promise对象,那么就会阻塞后面代码的运行 。但是async函数的调用并不会阻塞,它内部所有的阻塞都封装在Promise对象中异步执行。

await只处理resolve(data)时的数据,不处理reject(error) ,当异步函数体内出错的时候,怎么捕获到错误信息呢?

可以让await后的函数通过catch获取通过最外面的func函数的catch获取func函数体内使用try…catch…,然后从catch获取, try…catch可获取 async 函数内,任意 await 的错误,其中一个被拒绝,便会暂停,返回错误信息。async function func(){ const a = await asyncFunc();}asyncFunc().then().catch()async function func(){ const a = await asyncFunc();}func().then().catch()async function func(){ try(){ const a = await asyncFunc(); }catch(error){ }}🍔四、案例async function func(){ console.log('a') const c = await 'c' console.log(c) return 'd'}func().then(res=>console.log(res))console.log('b')

输出: 先输出a后输出b,说明async函数执行后会立即返回,不阻塞线程。

🥪附:直接量/字面量

文中提到了字面量,博文在这里做下介绍。 字面量又称之为直接量,代码中固定值的表示方法,程序中直接使用的数据,没进行过封装。可分为字符串字面量(string literal)、数组字面量(array literal)、对象字面量(object literal),函数字面量(function literal)。 一般除去函数表达式,在给变量赋值时,可以理解为=号右边的数据 。

var a = "1";var b = [1];var c = {};var d =function (){} // function() 为匿名函数

注意:函数字面量一般为匿名函数,但是语法也支持定义函数名。

var d =function func(){}
本文链接地址:https://www.jiuchutong.com/zhishi/293055.html 转载请保留说明!

上一篇:【今日清明】( © yangphoto )(今日清明节的下一句是什么)

下一篇:波白克岛的小尖塔岩石,英格兰多塞特 (© James Osmond/Alamy)

  • 小红书怎么看关注的人(小红书怎么看关注的店铺)

    小红书怎么看关注的人(小红书怎么看关注的店铺)

  • 加速器是干什么用的(加速器是干什么使的)

    加速器是干什么用的(加速器是干什么使的)

  • 拼多多怎么知道商家是哪里的(拼多多怎么知道我的真实姓名)

    拼多多怎么知道商家是哪里的(拼多多怎么知道我的真实姓名)

  • 华为mate30pro耳机插上还是外放(华为mate30pro耳机孔在哪在哪里)

    华为mate30pro耳机插上还是外放(华为mate30pro耳机孔在哪在哪里)

  • 手机上面显示volte是什么意思(手机上面显示VoLTE是什么意思)

    手机上面显示volte是什么意思(手机上面显示VoLTE是什么意思)

  • ana-an00是什么型号(ang-an00是什么手机)

    ana-an00是什么型号(ang-an00是什么手机)

  • iphone8截屏预览不见了(iphone8截图设置)

    iphone8截屏预览不见了(iphone8截图设置)

  • 抖音的作品怎么置顶(抖音的作品怎么快速删除)

    抖音的作品怎么置顶(抖音的作品怎么快速删除)

  • 苹果手机通话中其他电话进来怎么没有提示(苹果手机通话中断断续续什么原因)

    苹果手机通话中其他电话进来怎么没有提示(苹果手机通话中断断续续什么原因)

  • 静态ram和动态ram区别(ram分为静态ram和动态ram)

    静态ram和动态ram区别(ram分为静态ram和动态ram)

  • 微信对话翻译怎么取消(微信对话框翻译)

    微信对话翻译怎么取消(微信对话框翻译)

  • 华为手机nova6怎么截图(华为手机nova6怎么拍月亮)

    华为手机nova6怎么截图(华为手机nova6怎么拍月亮)

  • 连接isp服务器超时怎么办(连接isp服务器超出范围)

    连接isp服务器超时怎么办(连接isp服务器超出范围)

  • 微信视频过期了怎么恢复(微信视频过期了怎么看)

    微信视频过期了怎么恢复(微信视频过期了怎么看)

  • 淘宝延迟收货怎么操作(淘宝延迟收货怎么记账)

    淘宝延迟收货怎么操作(淘宝延迟收货怎么记账)

  • 快手粉丝删除怎么恢复(快手把粉丝删除了怎么能找回来)

    快手粉丝删除怎么恢复(快手把粉丝删除了怎么能找回来)

  • 苹果x无面容是什么意思(苹果x无面容是什么机子)

    苹果x无面容是什么意思(苹果x无面容是什么机子)

  • 解除唯品会绑定手机号(怎么解绑唯品会)

    解除唯品会绑定手机号(怎么解绑唯品会)

  • airpods充电盒怎么关机(Airpods充电盒怎么拆)

    airpods充电盒怎么关机(Airpods充电盒怎么拆)

  • 支付宝刷脸怎么设置(支付宝刷脸怎么关闭人脸)

    支付宝刷脸怎么设置(支付宝刷脸怎么关闭人脸)

  • 小米6内存不够用怎么扩展(小米6内存不够怎么扩容)

    小米6内存不够用怎么扩展(小米6内存不够怎么扩容)

  • 微信指纹支付可以改吗(微信指纹支付可以设置几个指纹)

    微信指纹支付可以改吗(微信指纹支付可以设置几个指纹)

  • 怎么确定电话被拉黑(怎么确定电话被拒接)

    怎么确定电话被拉黑(怎么确定电话被拒接)

  • 商贸企业出口进项税会计分录汇总
  • 商业折扣和现金折扣的入账金额
  • 公司主营销售墓地合法吗
  • 珠宝属于什么行业领域
  • 新会计准则中计提减值如何回转
  • 委托代征税务
  • 公司购买工装计入什么费用
  • 废品材料回收价格
  • 购进货物用于免征增值税项目
  • 代订机票款发票可以作为机票报销差旅吗
  • 父母的股权给子女可以怎样认证
  • 预缴税款后怎么开票
  • 简易计税的收入怎么做账
  • 普票3点怎么算
  • 物业公司怎么开展业务
  • 电梯的运行与维护
  • 收并购股权溢价
  • 软件开发公司怎么选择
  • 环保税计算方法和税率1.2
  • 增值税纳税申报表在哪里查询
  • 家常煲汤500例的做法窍门
  • 票已收到款未付怎么办
  • 暂估入账收入会计分录
  • 贴现短期无息应付票据
  • php curl命令详解
  • 固定资产抵账的增值税
  • 会计的四大基本要素
  • 手工帐应交税费明细账
  • 支付劳务公司的劳务费计入应付账款还是其他应付款
  • 企业会计准则股本
  • vue3微前端
  • 前端控制台
  • 机械干租和湿租的税率
  • php深度分析
  • 2023值得推荐的手机
  • 如何用python制作人工智能
  • 工资一定要对公发吗
  • vue实例完整项目源码
  • nodejs安装及环境配置vue
  • 删除ont命令
  • python中numpy数组和列表的区别
  • python字符串的符号
  • sql2000错误9003
  • 提高资产利用率的例子
  • 收到政府给员工的礼物
  • 什么叫做有限循环小数
  • 现金流量表编制原则
  • 广告牌制作加盟厂家
  • 水利建设基金的税率
  • 外账会计的做账流程
  • 成本结账是什么意思
  • 生物资产转让增值税
  • 会计科目中其期末余额应列入资产负债表存货项目的有
  • 本月取得的发票入账后次月对方能红冲吗
  • 为什么看科目四看不进去呀
  • 福利补贴制度
  • 固定资产二级明细科目有哪些
  • 平行结转分步法例题
  • 修改mysql数据库字符集
  • 用友t6运行特别慢
  • windowsserver2008r2密码重置
  • solaris的多线程实现方式
  • macu盘安装windows
  • window10电池
  • Ubuntu 8.10 Intrepid Ibex Alpha4 官方正式版下载
  • win7系统多久不动自动关机
  • win10edge浏览器怎么设置兼容模式
  • win8 自动登录
  • jquery地址
  • shtml精简教程让你知道什么是shtml
  • centos6.9查看网卡状态
  • javascriptz
  • js跨域的几种方法
  • 基于python的应用
  • jquery里面的$是什么意思
  • python的for函数
  • 河北网上税务登记流程
  • 企业所得税问题的研究论文
  • 企业内部清欠的措施和做法
  • 北京地税局报税时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设