手写Promise

@1 首先promise是一个构造函数,需要new一个实例对象。new Promise((resolve,reject)=>
       {resolve(10)})。 参数是一个方法,方法里面的参数又是两个改变状态的方法和返回值的方
        法。而且状态值进行修改后就不可以再进行修改了。

@2 function Promise(callback){
                var self = this // 这里是为了方便下面change函数中使用this
                self.status = 'pending' // 状态值
                self.result = undefiend // 返回值
                if(typeof callback !== 'function') throw new Error('callback is not a function') // 判断类型
                if(!(self instanceof Promise)) throw new TypeError('undefiend is not a promise')//判断
                // 创建一个修改状态和返回值得方法
                const change = function (state,result) {
                        if(self.state!=='pending') return ;  判断这里说明对状态修改过了 不再进行修改了
                        self.state = state
                        self.result = result
                }
                try{  // 捕获 callback方法执行成功还是失败
                        callback(  // 执行传递进来的方法
                                function resolve (value) { // value接受的传递返回值的参数
                                        change('fulfilled',value) // 调用成功的方法
                                }
                                function reject (value) { // // value接受的传递返回值的参数
                                         change('rejected',value) // 调用失败的方法
                                }
                        )

                }catch(_){ // 函数执行失败的时候需要将错误信息以及状态值进行修改
                           change('rejected', _.message) // 调用修改状态信息和返回值的方法
                }
        }
        执行构造函数:let p = new Promise((resolve,reject)=>{resolve(10)})
       

你可能感兴趣的:(前端)