Promise最常见的应用就是处理异步请求。前面的代码没有处理异步逻辑。Letpromise=newMyPromise((resolve,reject)=>{//resolve('---success----');setTimeout(()=>{resolve('success')},1000)//reject("---failed----");})promise.then(value=>{console.log(value);},reason=>{console.log(reason)})setTimeout添加到测试中代码。按照使用Promise的习惯,我们希望代码等待1秒后再执行elseif(this.status===REJECTED){failedCallback(this.reason)}}在MyPromise类中,then方法只判断成功和失败两种状态。当测试代码中出现异步逻辑时,程序会继续向下执行then方法。在then方法中,此时的状态还是pending。因此,增加了第三个等待状态判断。这里需要定义两个状态的回调属性,初始值为undefined,然后在then方法中,将参数赋值给两个属性。并且在resolve方法和reject方法中,需要判断callback属性是否存在,存在则执行。//成功回调successCallback=undefined;//失败回调failedCallback=undefined;resolve和reject方法更改:resolve=value=>{//如果状态不是等待,则阻止程序继续运行if(this.status!==PENDING)return//将状态更改为成功this.status=FULFILLED//保存成功值this.value=value;//判断成功回调是否存在,存在则调用this.successCallback&&this.successCallback(this.value);}reject=reason=>{//如果状态不是waiting,就阻止程序往下走if(this.status!==PENDING)return//把状态改成failurethis.status=REJECTED//保存的原因失败this.reason=原因;//判断失败回调是否存在,调用this.failedCallback&&this.failedCallback(this.reason);}then方法修改then(successCallback,failedCallback){//状态判断if(this.status===FULFILLED){successCallback(this.value)}elseif(this.status===REJECTED){failedCallback(this.reason)}else{//等等等等,需要把成功回调和失败回调存储起来,需要执行的时候执行。this.successCallback=successCallback;this.failedCallback=failedCallback;}}测试代码测试通过,等待一秒后打印成功
