promise还有一个很重要的特点,then方法可以链式调用,下一个then方法得到的值就是上一个then的返回值方法实现这个功能,需要两步,首先是实现then方法的链式调用,其次是将上一个then方法的回调函数的返回值传递给下一个then方法。then方法属于promise的一个属性,then方法执行后返回一个promise对象,然后在then方法中可以创建一个新的promise对象并返回,这样then方法就可以一直执行.promise的构造函数接收到一个executor,需要立即执行,所以这个需求可以通过将原来then方法中的代码放到executor中来实现。执行器中的代码逻辑也需要修改。无论是成功状态还是失败状态,都需要对返回值类型进行判断。如果是普通值,可以立即执行,传递给下一个promise对象。如果它是一个promise对象,则需要检查它的状态,并传递给下一个promise对象。处理返回值类型的公共方法,(reason)=>{//reject(reason)//})//简化代码e.then(resolve,reject);}else{//公共值resolve(e);}}then方法修改then(successCallback,failedCallback){letpromise2=newPromise((resolve,reject)=>{//状态判断if(this.status===FULFILLED){//定义成功回调返回值和传递给next的成功回调然后letsuccessRtn=successCallback(this.value);//判断successRtn的值是普通值还是promise对象//如果是普通值,直接调用resolve//如果是promise对象,检查promsie对象返回的结果//然后根据promise对象返回结果,决定是调用resolve还是调用reject//执行resolve方法相当于把返回值传给了接下来的成功回调函数thenresolvePromise(successRtn,resolve,reject);}elseif(this.stat我们===REJECTED){让failedRtn=failedCallback(this.reason);resolvePromise(failedRtn,resolve,reject);}else{//等待,需要存储成功回调和失败回调,需要执行的时候执行this.successCallback.push(successCallback);this.failedCallback.push(failedCallback);}});回报承诺2;}测试代码letpromise=newMyPromise((resolve,reject)=>{resolve('---success----');//setTimeout(()=>{//resolve('success')//},3000)//reject("---failed----");})functionother(){returnnewMyPromise((resolve,reject)=>{resolve("apromiseobject")})}promise.then(value=>{console.log(value);returnother();},reason=>{console.log(reason)}).then(value=>{console.log(value)})测试print---success----一个promise对象,表示逻辑修改成功
