手写Promise

112 阅读1分钟
function Promise(executor){
    let self = this
    self.status = 'pending' // 等待态
    self.value = undefined // 成功的返回值
    self.reason = undefined // 失败的原因

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

    function reject(reason){
        if(self.status === 'pending'){
            self.status = 'rejected'
            self.reason = reason
        }
    }
    try{
        executor(resolve,reject)
    }catch(e){
        reject(e) //捕获时发生异常直接失败
    }

}
// onFufiled 成功的回调
// onRejected 失败的回调
Promise.prototype.then = function(onFufiled,onRejected){
    let self = this
    if(self.status = 'resolved'){
        onFufiled(self.value)
    }
    if(self.status = 'rejected'){
        onRejected(self.reason)
    }
}
module.exports = Promise