const PENDING = 'pending';
const FULFILLED = 'fulfilled';
const REJECT = 'reject';
class MyPromise {
/**
* 创建一个Promise
* @param {Function} executor 任务执行器,立即执行
*/
constructor(executor){
this._state = PENDING;//状态
this._value = undefined;//数据
try{
executor(this._resolve.bind(this),this._reject.bind(this))
} catch (error){
this._reject(error)
}
}
/**
* 更改任务状态
* @param {String} newState 新状态
* @param {any} value 数据
* @returns
*/
_changeState = (newState,value)=>{
if(this._state !== PENDING){
// 目前状态已经更改完成,不可再次修改状态
return
}
this._state = newState;
this._value = value;
}
/**
* 标记当前任务完成
* @param {any} data 任务完成得相关数据
*/
_resolve = (data)=>{
this._changeState(FULFILLED,data);
}
/**
* 标记当前任务失败
* @param {any} season 任务失败得相关数据
*/
_reject = (season)=>{
this._changeState(REJECT,season);
}
}
new MyPromise((resolve,reject)=>{
resolve('123');
// resolve('321');
// throw new Error('错误')
})