前言Promise是前端面试和工作中极为常见的一个概念。其各种方法的手写实现也有市场。今天就把Promise的基本方法的简单实现总结到这里。catch()方法catch方法是对then方法的封装,仅用于接收reject(reason)中的错误信息。因为then方法中的onRejected参数不能传。如果没有通过,则依次传递错误信息,直到收到onRejected函数。所以写promise链式调用的时候,then方法不传onRejected函数。只需要在最后加一个catch(),这样链中promise的错误就会被最后一个catch捕获。catch(onRejected){returnthis.then(null,onRejected);}done()方法catch在promise链调用结束时调用,用于捕获链中的错误信息,但在catch方法内部也可能出现错误,所以一些done方法已添加到promise实现中。done相当于提供了一个没有错误的catch方法,不再返回一个promise,一般用于结束一个promise链。done(){this.catch(reason=>{console.log('done',reason);throwreason;});}finally()方法不管是resolve还是reject都会用到finally方法,参数函数最后y将被执行。finally(fn){returnthis.then(value=>{fn();returnvalue;},reason=>{fn();throwreason;});};Promise.all()方法Promise.all方法接收一个promise数组,返回一个新的promise2,并发执行数组中的所有promise。当所有的promise都resolve之后,promise2会resolve并返回所有的promise结果。结果的顺序与promise数组的顺序一致。如果一个promise处于rejected状态,则整个promise2进入rejected状态。staticall(promiseList){returnnewPromise((resolve,reject)=>{constresult=[];leti=0;for(constpofpromiseList){p.then(value=>{result[i]=value;if(result.length===promiseList.length){resolve(result);}},reject);i++;}});}Promise.race()方法Promise.race方法接收一个promise数组并返回一个新的promise2按顺序执行数组中的promise。如果一个promise的状态被确认,则promise2的状态被确认并且与这个promise的状态一致。staticrace(promiseList){returnnewPromise((resolve,reject)=>{for(constpofpromiseList){p.then((value)=>{resolve(value);},reject);}});}Promise.resolve()和Promise.reject()Promise.resolve用于生成一个被拒绝的完成promise,而Promise.reject用于生成一个被拒绝的失败promise。静态解析(值){让承诺;promise=newPromise((resolve,reject)=>{this.resolvePromise(promise,value,resolve,reject);});returnpromise;}staticreject(reason){returnnewPromise((resolve,reject)=>{reject(reason);});}总结一下,常用的方法基本就这些,还有很多扩展方法Promise,这里就不展示了。基本上都是then方法的进一步封装,只要你的then方法没有问题,其他的方法都可以依赖then方法实现。~~本文到此结束,感谢阅读!~学习有趣的知识,认识有趣的朋友,塑造有趣的灵魂!大家好,我是〖编程三昧〗的作者王隐,我的公众号是《编程三昧》,欢迎关注,希望大家多多指教!
