位置: 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)

  • 怎样利用百度经验做网络推广(怎样利用百度经验赚钱)

    怎样利用百度经验做网络推广(怎样利用百度经验赚钱)

  • 小天才电话手表怎么关闭睡眠模式(小天才电话手表怎么恢复出厂设置)

    小天才电话手表怎么关闭睡眠模式(小天才电话手表怎么恢复出厂设置)

  • airpods丢了怎么查找(airpods丢了怎么用ipad找)

    airpods丢了怎么查找(airpods丢了怎么用ipad找)

  • 小天才z6手表睡眠模式怎么取消(小天才z6巅峰版睡眠模式)

    小天才z6手表睡眠模式怎么取消(小天才z6巅峰版睡眠模式)

  • 荣耀5和m5青春版对比(荣耀5和m5青春版哪个好)

    荣耀5和m5青春版对比(荣耀5和m5青春版哪个好)

  • 快手拍照黑白怎样调换成彩色(快手拍照黑白怎么调成彩色)

    快手拍照黑白怎样调换成彩色(快手拍照黑白怎么调成彩色)

  • 开机运行启动项命令(运行里开机启动项)

    开机运行启动项命令(运行里开机启动项)

  • 华为荣耀play4pro什么时候上市的

    华为荣耀play4pro什么时候上市的

  • kirin980是什么处理器(kirin980是什么处理器和骁龙)

    kirin980是什么处理器(kirin980是什么处理器和骁龙)

  • 苹果11pro多长(ipone11pro多长)

    苹果11pro多长(ipone11pro多长)

  • win7支持gpt分区吗(win7可以gpt)

    win7支持gpt分区吗(win7可以gpt)

  • 抖音小店注销后还能开吗(抖音小店注销后抖音号解绑吗)

    抖音小店注销后还能开吗(抖音小店注销后抖音号解绑吗)

  • 表格有虚线怎么变实线(表格有虚线怎么弄掉)

    表格有虚线怎么变实线(表格有虚线怎么弄掉)

  • 震旦打印机卡纸怎么办(震旦打印机卡纸怎么拿出来)

    震旦打印机卡纸怎么办(震旦打印机卡纸怎么拿出来)

  • oppo有隐私空间吗(oppo隐私空间怎么打开)

    oppo有隐私空间吗(oppo隐私空间怎么打开)

  • 机顶盒和电视盒子有什么区别(机顶盒和电视盒子一样吗)

    机顶盒和电视盒子有什么区别(机顶盒和电视盒子一样吗)

  • 双卡可以两个移动卡吗(双卡两个移动)

    双卡可以两个移动卡吗(双卡两个移动)

  • 加入抖音公会后,可以退出吗(加入抖音公会后不播了会怎么样)

    加入抖音公会后,可以退出吗(加入抖音公会后不播了会怎么样)

  • 淘宝店铺几颗心升一钻(淘宝店铺几颗心是一个钻)

    淘宝店铺几颗心升一钻(淘宝店铺几颗心是一个钻)

  • 基金从业资格考试报名时间_成绩查询(基金从业资格考试)

    基金从业资格考试报名时间_成绩查询(基金从业资格考试)

  • 补手机号码卡号变吗(补手机卡号要钱吗)

    补手机号码卡号变吗(补手机卡号要钱吗)

  • 4 128g和6 128g有什么区别(6+128g和4+128g哪个好)

    4 128g和6 128g有什么区别(6+128g和4+128g哪个好)

  • 一加7pro支持红外吗(一加七pro支持红外遥控吗)

    一加7pro支持红外吗(一加七pro支持红外遥控吗)

  • mate20x是5g手机吗

    mate20x是5g手机吗

  • 天天快报为什么提现不了(天天快报为什么停运)

    天天快报为什么提现不了(天天快报为什么停运)

  • 手机root后怎么刷机(手机root后怎么改充电速度)

    手机root后怎么刷机(手机root后怎么改充电速度)

  • 印花税处罚适用征管法吗
  • 公司章程在工商局
  • 差旅费津贴需要缴纳个人所得税吗?
  • 消防公司支付劳务费会计处理
  • 抵扣联的抵扣期限
  • 社保缴纳已超标准
  • 车辆使用费怎么开票
  • 以旧换新的会计处理规定
  • 存货暂估入账会引起存货账面价值发生增减变动吗
  • 公司购买销售材料怎么写会计分录?
  • 个税手续费返还计入哪个科目
  • 增资扩股投资方要交印花税吗
  • 跨季度的发票怎么冲销
  • 个体户上季度未申报能补报吗
  • 一般纳税人开劳务费税率是多少2023
  • 税号里面有字母吗
  • 用友t3怎么删除损益结转凭证
  • 进项税和销项税借贷方向
  • 外资企业税率是多少
  • 简易计税项目进项
  • 小额纳税人进口增值税适用税率?
  • mac菜单栏设置在哪里
  • 期初未缴纳税额负数
  • 银行存款收款凭证属于什么凭证
  • 房产税存在往期未申报信息怎么处理
  • 出差人员餐费,进项可以抵扣吗
  • 事业单位投资收回账务处理
  • 深度学习模型精度fp16和fp32
  • 排污费应计入什么会计科
  • 企业法人看病费用能报销吗
  • 免税跟零税率
  • 融资租赁会计处理小企业会计准则
  • the模板引擎
  • 工行对公贷款利息扣除时间
  • codeignitor
  • vue引入文件路径@的意思
  • 其他货币资金的账务处理
  • 应付国库集中支付结余在什么时候确认
  • 购买电脑如何入账
  • 让我看看他们
  • Ubuntu18.04配置允许远程访问
  • 【6G 新技术】6G数据面介绍
  • 没有计提坏账如何披露
  • 新增总产值
  • 成本分配明细表
  • 社保费已扣为什么显示欠缴
  • 企业送的购物卡怎么退回去
  • python爬虫入门教程
  • 设备安装工程施工及验收规范
  • MySQL数据库性能优化
  • 出口退税款计入营业外收入
  • 车辆保险费用查询
  • 计提坏账准备如何做会计分录
  • 出租机械设备
  • 货物赔偿款如何计算
  • 成本少了怎么处理
  • 关联的公司
  • 退货会计如何处理
  • 购车怎么做会计分录
  • win7系统IE浏览器打开跳转到360浏览器,怎么阻止
  • 微软在印度的投资
  • mac系统怎么打开任务管理器
  • 修改ssh端口号
  • Win10怎么修改hosts文件
  • mac屏保怎么换
  • win8安装应用商店
  • win7系统怎么禁用开机启动项
  • ExtJS 2.0实用简明教程 之获得ExtJS
  • jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
  • nodejs 视频切片
  • xml文件网络传输
  • nodejs.
  • android刷新activity
  • 轻轻松松学习JavaScript
  • js中数组排序sort的用法
  • 用javascript
  • 国家税务局湖北省税务总局
  • 福建税务网址
  • 湖州市2020年最低生活保障
  • 南京国税局长是谁
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设