最近复习了一下Promise,决定自己实现一下,加深对Promise流程的理解。当然,这个模拟还不是很完善,比如把events放在了原型上,这个会导致新的MyPromise也受到影响。
/**
* 使用MyPromise模拟Promise基本功能:
* MyPromise新建就立即执行其参数fn,这点比较重要
* fn里面必须调用状态函数resolve或者reject之一
* 每次.then接受一个处理MyPromise当前状态的回调函数,包括resolve和reject(都是异步执行)
* 回调函数里面默认或者显式返回一个新的MyPromise,之后的then中的回调是处理新的MyPromise的状态
* 每次resolve或者reject执行就形成了一个新的MyPromise(并立即执行),后续的then会处理其状态,这样就保证默认的状态不会改变
*
* 使用MyPromise.prototype.events保存时间,其实then链是最先执行的
* 每次resolve或者reject都会使得events中的第一个回调出队列
*
* @param fun
* @constructor
*/
function MyPromise(fun){
//用于生成MyPromise的id,其实在then执行的时候,都是利用同一个MyPromise将回调保存在events
this.id = ++MyPromise.prototype.counts;
var that = this;
var resolve = function(value){
var events = MyPromise.prototype.events;
if(events.length>0){
c