异步编程的回调解决方案

异步编程是面试时一定会问的


  1. 传统异步编程方案
  2. promise

传统异步编程的解决方案

js:事件驱动机制,单线程,异步操作实现阻塞IO

callback回调函数:

通过参数传入回调,回调时让函数的调用者判断发生了什么。
缺点:不利于代码的阅读和回复,程序的流程会比较乱,而且每个任务只能指定一个回调函数。

观察者模式(事件发布/订阅模式):

思想:回调函数的事件化,任务的执行不取决于代码的执行顺序,而取决于某个事件是否发生。

优点:可以绑定多个事件,每个事件可以指定多个回调函数。
缺点:程序变成事件驱动型,运行流程不清晰。

deferred延迟函数:

通过deferred对象给异步操作进行状态绑定,deferred对象提供统一的API,对异步操作的状态操作。

优点:避免了层层嵌套的回调函数deferred对象提供统一的接口,使得控制异步操作更加容易。(Promise的思想)
缺点:状态不可逆,状态一旦确定,无法更改。


Promise规范

Promise是异步编程的一种解决方案,简单来说是一个容器,里面保存着一个异步操作的结果。提供统一的API,各种异步操作都可以使用同样的方法进行处理。

参考资料:阮一峰es6教程

经典的数据类型的判断方法:toString.call(),是什么类型,得到的字符串就是[object 类型名];使用typeof不准确。

Promise, Deferred就是一些容器的语法糖,剩下的就是封装语法糖。

原理:是一个容器,内部封装着一些callbacks,而这个容器有两个方法:add和fire,add用来向容器中添加callback,fire则用来实现依次调用容器内所有的callback。容器有着一些参数,比如once,memory和stopOnFalse。promise和deferred则是这个容器的一些语法糖。