Async await 解析
2024-08-30 19:50:24
Async
- 定义:使异步函数以同步函数的形式书写(Generator函数语法糖)
- 原理:将Generator函数和自动执行器spawn包装在一个函数里
- 形式:将Generator函数的*替换成async,将yield替换成await
- 声明
- 具名函数:async function Func() {}
- 函数表达式:const func = async function() {}
- 箭头函数:const func = async() => {}
- 对象方法:const obj = { async func() {} }
- 类方法:class Cla { async Func() {} }
- await命令:等待当前Promise对象状态变更完毕
- 正常情况:后面是Promise对象则返回其结果,否则返回对应的值
- 后随Thenable对象:将其等同于Promise对象返回其结果
- 错误处理:将await命令Promise对象放到try-catch中(可放多个)
应用场景
- 按顺序完成异步操作
重点难点
- Async函数返回Promise对象,可使用then()添加回调函数
- 内部return返回值会成为后续then()的出参
- 内部抛出错误会导致返回的Promise对象变为rejected状态,被catch()接收到
- 返回的Promise对象必须等到内部所有await命令Promise对象执行完才会发生状态改变,除非遇到return语句或抛出错误
- 任何一个await命令Promise对象变为rejected状态,整个Async函数都会中断执行
- 希望即使前一个异步操作失败也不要中断后面的异步操作
- 将await命令Promise对象放到try-catch中
- await命令Promise对象跟一个catch()
- await命令Promise对象可能变为rejected状态,最好把其放到try-catch中
- 多个await命令Promise对象若不存在继发关系,最好让它们同时触发
- await命令只能用在Async函数之中,否则会报错
- 数组使用forEach()执行async/await会失效,可使用for-of和Promise.all()代替
- 可保留运行堆栈,函数上下文随着Async函数的执行而存在,执行完成就消失
异步迭代器(for-wait-of):,循环等待每个Promise对象变为resolved状态才进入下一步
最新文章
- 【初码干货】在Window Server 2016中使用Web Deploy方式发布.NET Web应用的重新梳理
- Bootstrap 表格 笔记
- C#窗体 自定义控件
- 解决BeanNotOfRequiredTypeException: Bean named 'XXX' must be of type XXX, but was actually of type XXX问题
- RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
- linux phpstorm安装和激活方法
- POJ 1077 &;&; HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3
- Bean实例化(Spring源码阅读)-我们到底能走多远系列(33)
- Boost.Any
- Monolog - Logging for PHP 5.3+
- vmware 8下ubuntu 13.04安装vmware tools
- 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
- 正确的注销PHP SESSION
- nginx-lua实现简单权限控制
- http請求瀏覽器的緩存機制
- ubuntu系统普通用户sudo命令执行报错解决方案
- vue2.0与实战开发
- 【NOI2014】魔法森林
- XiaomiPushDemo【小米推送集成,基于V3.6.12版本】
- 虚拟机上不了网的 VMware Workstation 与 Device/Credential Guard 不兼容
热门文章
- 数据库连接池Flask-SQLAlchemy中多线程安全的问题
- C# 可扩展编程MEF学习
- stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序
- osg 场景漫游
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_17-课程预览功能开发-前后端测试
- Saltstack把网卡从ens160修改成eth0
- 使用pycharm调试django 打断点调试后台代码
- UIPath工具取得某个路径下的文件夹的名称
- UIPath工具来取得邮件里面的添付文件及邮件内容
- springboot与redis