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 @   蛙仔  阅读(1838)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示