promise初长成
//手写Promise全家桶
class myPromise{
//构造器
constructor(executor) {
this.state = 'pending';
this.value = undefined;
this.reason = undefined;
//success
const resolve = (value)=>{
if(this.state === 'pending'){
this.state = 'fulfilled';
this.value = value;
}
};
//fail
const reject = (reason)=>{
if(this.state === "pending"){
this.state = 'rejected';
this.reason = reason;
}
};
//立即执行
try{
executor(resolve,reject);
}catch (err) {
reject(err);
}
}
//then方法,根据构造器中的state执行失败或者成功
then(onFulfilled,onRejected){
if(this.state === 'fulfilled'){
onFulfilled(this.value);
}
if(this.state === 'rejected'){
onRejected(this.reason);
}
}
}
const promise = new myPromise((resolve,reject)=>{
//随机生成一个数,偶数走resolve,奇数走reject
let num = parseInt(Math.random()*10+'');
if(num % 2 === 0){
resolve(num);
}else {
reject(num);
}
});
//实验一下then方法
promise.then(res=>console.log('偶数正确',res),err=>console.log('错误奇数',err));