异步编程
目前在 JavaScript 中进行异步编程可以采用的形式有回调函数、事件监听、观察者模式、Promise、Generator 和 async/await。
Promise
- 是一个拥有
then()
的对象或函数; - 有
pending
、resolved
和rejected
三种状态,只能由pending
变成resolved
或rejected
,resolved
和rejected
互相不能转换; - 执行成功时调用
then()
的第一个回调函数,失败时调用第二个回调函数; - 实例对象的
then()
必须返回一个新的 Promise 实例; - 解决了多重嵌套的回调函数带来的「回调地狱」;
- 没有提供原生的中止 Promise 链的方法。
Generator
async/await
- 可以理解为是 Generator 的语法糖,
async
相当于*
,await
相当于yield
; - 内置执行器;
async
函数的返回值是 Promise 实例;await
后是 Promise 实例或会被转化为 Promise 实例的普通值;await
只能在async
函数中使用。