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状态才进入下一步

最新文章

  1. 【初码干货】在Window Server 2016中使用Web Deploy方式发布.NET Web应用的重新梳理
  2. Bootstrap 表格 笔记
  3. C#窗体 自定义控件
  4. 解决BeanNotOfRequiredTypeException: Bean named 'XXX' must be of type XXX, but was actually of type XXX问题
  5. RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
  6. linux phpstorm安装和激活方法
  7. POJ 1077 && HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3
  8. Bean实例化(Spring源码阅读)-我们到底能走多远系列(33)
  9. Boost.Any
  10. Monolog - Logging for PHP 5.3+
  11. vmware 8下ubuntu 13.04安装vmware tools
  12. 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
  13. 正确的注销PHP SESSION
  14. nginx-lua实现简单权限控制
  15. http請求瀏覽器的緩存機制
  16. ubuntu系统普通用户sudo命令执行报错解决方案
  17. vue2.0与实战开发
  18. 【NOI2014】魔法森林
  19. XiaomiPushDemo【小米推送集成,基于V3.6.12版本】
  20. 虚拟机上不了网的 VMware Workstation 与 Device/Credential Guard 不兼容

热门文章

  1. 数据库连接池Flask-SQLAlchemy中多线程安全的问题
  2. C# 可扩展编程MEF学习
  3. stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序
  4. osg 场景漫游
  5. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_17-课程预览功能开发-前后端测试
  6. Saltstack把网卡从ens160修改成eth0
  7. 使用pycharm调试django 打断点调试后台代码
  8. UIPath工具取得某个路径下的文件夹的名称
  9. UIPath工具来取得邮件里面的添付文件及邮件内容
  10. springboot与redis