Async await 解析

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

猜你喜欢

转载自www.cnblogs.com/lijinxiao/p/11647804.html