Promise 自定义封装 then 函数
<script src="./Promise.js"></script> <script type="text/javascript"> let p = new Promise((resolve, reject) => { resolve('ok'); }) p.then(res => { console.log('res', res) }, err => { console.log(err) }) </script>
我们现在发现,then方法中压根就没有输出内容;
是因为我们对then函数没有进行封装;
所以现在我们需要对then函数进行一次封装了
怎么封装了???????????、
31 自定义封装 then 方法执行回调
function Promise(executor){ const self=this; function resolve(data){ // 如果状态发生改变就直接返回(为了让Promise的状态只发生一次改变); if( self.PromiseStatus!=='pending') return self.PromiseStatus='resolved'; self.PromiseValue=data; } // 同样声明成为一个函数;修改状态 function reject(err){ // 如果状态发生改变就直接返回(为了让Promise的状态只发生一次改变); if( self.PromiseStatus!=='pending') return self.PromiseStatus='rejected'; self.PromiseValue=err; } this.PromiseStatus ='pending' ; this.PromiseValue =null; // 对异常进行处理;使用try catch try{ executor(resolve,reject); }catch(err){ reject(err); } } // 自定义封装then方法执行回调 Promise.prototype.then=function(onResolve,onReject){ //下面的this是指向实例对象p的哈; //{PromiseStatus:"resolved"PromiseValue:"ok"} if(this.PromiseStatus==='resolved'){ onResolve(this.PromiseValue) } if(this.PromiseStatus==='rejected'){ onReject(this.PromiseValue) } }