let myPromise = function(fn) {
let _self = this;
this.state = 'pending'; //myPromise 初始化状态
this.result = null; //成功时返回得结果
this.reason = null;
this.resolveHandler = null;
this.rejectHandler = null;
//异步操作成功时调用得方法 相当于你 resolve('1')
this.resolved = val => {
_self.state = 'resolved'; //把状态改成resolved状态
_self.result = val; //成功得值保存起来
if (typeof _self.resolveHandler === 'function') {
_self.resolveHandler(val); //执行then里面得成功函数
}
};
//异步操作成功时调用得方法 相当于你 reject('1')
this.rejected = val => {
_self.state = 'rejected';
_self.reason = val;
if (typeof _self.rejectHandler === 'function') {
_self.rejectHandler(val); //执行then里面得失败函数
}
};
this._promise = {};
this._promise._p = _self;
this._promise.then = (resolveHandler, rejectHandler) => {
switch (this.state) {
case 'pending': // 如果是pending 状态就成功和失败得回调保存起来
_self.resolveHandler =
typeof resolveHandler === 'function' ? resolveHandler : null;
_self.rejectHandler =
typeof rejectHandler === 'function' ? rejectHandler : null;
break;
case 'resolved':
typeof resolvedHandler === 'function' && resolvedHandler(_self.result);
break;
case 'rejected':
typeof rejectedHandler === 'function' && rejectedHandler(_self.reason);
}
};
//执行new promise里面转得函数
fn(this.resolved,this.rejected)
return this._promise
};
new myPromise(function(resolve, reject) {
setTimeout(function(){
resolve(11)
},1000)
}).then(function(val) {
console.log(val)
}, function() {});