# Async await的实现


了解async await的用法

# Async的作用是什么?

  • async申明一个函数是异步的
  • 返回一个Promise对象,return Promise.resolve('函数内返回的值或者undefined')

# await在等待什么?

  • await 等待一个异步函数执行完成,await 只能在 async 函数中
  • await 是一个表达式,这个表达式的结果是promise对象或者其他值
    • 如果等到的是一个直接变量,那么继续往下执行运算
    • 如果等到的是一个promise,它会阻塞后面的代码,等待promise.resove的执行,并且拿到resove的值,作为的await的结果

# 已经有了Promise,为什么还要 Async await?

了解Promsie和它的的优缺点

Async await的优势

  • 语法简洁清晰
  • 错误处理,可以直接用try...catch来捕获异常
  • 添加条件判断,可通过return直接中断执行,更符合直觉
  • 减少不必要的中间变量
  • 更清晰明确的错误堆栈
  • 方便调试,可以给每个异步动作添加断点

# async await的缺点是什么?

  • Async/Await 并不能很好的支持异步并发
  • async默认返回Promsie,这意味着Promise中存在的问题,async也会遇到,最典型的是会静默吞掉异常。所以虽然async/await中可以通过try...catch捕获await中的异常,但是不得不给所有的await添加try...catch,否则async函数返回的只是一个执行了rejectpromsie
  • 因为兼容问题,需要babel编译,编译后的代码臃肿而简陋
上次更新: 4/25/2019, 11:00:04 PM