回调函数
优点
- 简单、容易理解
- Ajax、Fetch、EventSource
缺点
- 多个回调函数嵌套的时候会造成回调函数地狱
- 不利于维护,代码耦合高
事件监听
采用事件驱动模式,取决于某个事件是否发生
优点
容易理解,可以绑定多个事件,每个事件可以指定多个回调函数
缺点
事件驱动型,流程不够清晰
发布/订阅(观察者模式)
类似于事件监听,但是可以通过消息中心,了解现在有多少发布者,多少订阅者
Promise 对象
优点
可以利用 then 方法,进行链式写法;可以书写错误时的回调函数
缺点
- 多个 then 的链式调用,可能会造成代码的语义不够明确
- 编写和理解,相对比较难
Generator 函数
优点
函数体内外的数据交换、错误处理机制
缺点
流程管理不方便
co 模块
async 函数
优点
- generator 和 promise 实现的一个自动执行的语法糖
- 内置执行器、更好的语义、更广的适用性、返回的是 Promise、结构清晰
缺点
错误处理机制