SOURCE

// promise
// 三种状态 padding resolve reject

// promise 函数主体
// 存储对应的状态,存储对应的执行结果
// 时刻牢记,promise的参数是一个判断成功与否的函数
// then的参数是一个用于接受返回值的函数
function myPromise(constructor){
    let self = this
    self.status = 'padding'
    self.value = undefined
    self.reason = undefined

    function resolve(value){
        if(self.status === 'padding'){
            self.status = 'resolve'
            self.value = value
        }
    }

    function reject(reason){
        if(self.status === 'padding'){
            self.status = 'reject'
            self.reason = reason
        }
    }

    try{
        constructor(resolve, reject)
    }catch(e){
        reject(e)
    }
}

// 添加then方法
// 功能,访问到上一步存储的值
myPromise.prototype.then = function(Fullfilled,Rejected) {
    let self = this
    switch(self.status){
        case 'resolve':
            Fullfilled(self.value)
            break
        case 'reject':
            Rejected(self.reason)
            break
        default:
    }
}

let a = '操作成功'
let b = '操作失败'
let p = new myPromise((resolve, rejest) => {
    if(b === '操作成功'){
        resolve('成功')
    }else{
        rejest('失败')
    }
})
p.then(res => {
    console.log(res)
},rej => {
    console.log(rej)
})
console 命令行工具 X clear

                    
>
console