手写promise
class MyPromiseTest {
static PENDING = '开始';
static SUCCESS = '成功';
static FAIL = '失败';
constructor(func){
this.status = MyPromiseTest.PENDING;
this.result = null;
this.resolveFun = [];
this.rejectFun = [];
try {
func(this.resolve.bind(this),this.reject.bind(this))
} catch (error) {
this.reject(error)
}
}
resolve(result){
setTimeout(() => {
if(this.status === MyPromiseTest.PENDING){
this.status = MyPromiseTest.SUCCESS;
this.result = result;
this.resolveFun.forEach(item =>{
item(this.result);
})
}
});
}
reject(result){
setTimeout(() => {
if(this.status === MyPromiseTest.PENDING){
this.status = MyPromiseTest.FAIL;
this.result = result;
this.rejectFun.forEach(item =>{
item(this.result);
})
}
});
then(OnResolve,OnReject){
OnResolve = typeof OnResolve === 'function' ? OnResolve : ()=>{};
OnReject = typeof OnReject === 'function' ? OnReject : ()=>{};
if(this.status === MyPromiseTest.PENDING){
this.resolveFun.push(OnResolve);
this.rejectFun.push(OnReject);
}
if( this.status === MyPromiseTest.SUCCESS){
setTimeout(() => {
OnResolve(this.result)
});
}
if(this.status === MyPromiseTest.FAIL){
setTimeout(() => {
OnReject(this.result)
});
}
}
}
console.log('1');
let pppp = new MyPromiseTest(function (resolve,reject) {
console.log('2');
setTimeout(() => {
resolve('成果时....');
console.log('4');
}, 0);
})
pppp.then(
function (d) {
console.log(d);
},
function(){
}
)
console.log('3');



