异步编程

目前在 JavaScript 中进行异步编程可以采用的形式有回调函数、事件监听、观察者模式、Promise、Generator 和 async/await。

Promise

  1. 是一个拥有 then() 的对象或函数;
  2. pendingresolvedrejected 三种状态,只能由 pending 变成 resolvedrejectedresolvedrejected 互相不能转换;
  3. 执行成功时调用 then() 的第一个回调函数,失败时调用第二个回调函数;
  4. 实例对象的 then() 必须返回一个新的 Promise 实例;
  5. 解决了多重嵌套的回调函数带来的「回调地狱」;
  6. 没有提供原生的中止 Promise 链的方法。

Generator

async/await

  1. 可以理解为是 Generator 的语法糖,async 相当于 *await 相当于 yield
  2. 内置执行器;
  3. async 函数的返回值是 Promise 实例;
  4. await 后是 Promise 实例或会被转化为 Promise 实例的普通值;
  5. await 只能在 async 函数中使用。