Promise常用的方法

在开发过程中,Promise常用的方法有:all ,any,race ,allSettled。

1. Promise.all

all,它接受的参数是个数组,它只有等所有请求都结束才会有结果,都成功才会执行.then,then返回的也是一个数组,它与参数中的promise数组是一一对应的;如果返回中有一个错误就会执行.catch。

             

 

2. Promise.any

any,它也是接受一个promise数组,只要有一个成功,就会执行then,只有当所有的promise都失败,才算失败,此时Promise.any 会把所有的失败/错误集合在一起,返回一个失败的 promise AggregateError类型的实例。MDN 上说这个方法还处于试验阶段,如果 node 或者浏览器版本过低可能无法使用,各位自行测试下。

3. Promise.race

race,它跟all一样,也是接受一个promise数组,但它只需要数组中1个有反应,他就会立马结束,它只要那个最快的结果,不管这个反应是成功还是结束,成功就.then,失败就.catch。可以理解为race是速度型选手,只要最快的那个,不管结果。

    

 

4. Promise.allSettled

allSettled,它同样是接受一个数组,但它不会执行.catch,只会执行.then,也是等所有请求结束后,返回一个数组,数组里的每项与参数的数组每项一一对应,返回的每项包含字段:

status:状态(rejected/fulfilled),value:成功返回的值,reason:失败返回的值。

我一般用它的场景是页面中有多个表单需要校验,这样多个表单的validate方法就是一个数组,allSettled方法的参数,然后我可以找到第几个表单校验失败。

        

5. Promise中的.then .catch .finally

.then和.catch可以一直点下去,也都会执行(ps:都会执行的意思是没有reject就会执行then,否则执行catch);因为.then和.catch、.finally也是promise,每次 then或catch的结果是上次then或者catch方法所return的结果。async 方法也可以一直.then .catch执行下去,因为async 方法也是一个promise。

不管结果返回成功还是失败,都会执行finally,而且finally不接受任何参数。

           

 

6. 手写一个Promise.all

Promise.all的核心就是,接受一个promise数组,只要有一个失败就catch,所有都成功就then,而且还是按照顺序的。

 Promise如果没有resolve或者reject,即使一个return,还是会一直处于pending状态。所以在上面手写的时间,里面有个foreach循环等所有promise都得到结果才resolve,或有一个错误结果就reject。

 

 

 

 

 

posted @ 2022-12-23 15:11  蛙仔  阅读(1596)  评论(0编辑  收藏  举报