详解JavaScript中Promise类的使用方法.docx

详解JavaScript中Promise类的使用方法

目录1.all2.allSettled3.race4.any这篇主要讲一下Promise的类方法的基本使用,至于Promise的基本使用这里就不赘述了,之前也有手写过Promise、实现了Promise的核心逻辑。其实我们平时用Promise也挺多的,不过又出现了两个新的语法(ES11,ES12新增了两个),所以这篇就简单说一下,也挺简单

1.all

Promise.all方法我们可以传入一个数组参数,数组中可以放多个Promise,它会等所有的Promise的状态都为fulfilled时,来获取最终的结果,它会把所有每个Promiseresolve的结果,放在一个数组中,且结果的顺序和我们传入的数组参数中的Promise保持一直(跟时间无关)

constp1=newPromise((resolve,reject)={

constobj={data:11111}

setTimeout(()={

resolve(obj)

},3000)

constp2=newPromise((resolve,reject)={

constobj={data:22222}

setTimeout(()={

resolve(obj)

},2000)

constp3=newPromise((resolve,reject)={

constobj={data:33333}

setTimeout(()={

resolve(obj)

},1000)

Promise.all([p1,p2,p3]).then(result={

console.log(result)

}).catch(err={

console.log(err:,err)

})

上面代码会在3s后在then方法中拿到最终的结果如下:

但是all方法是有个缺陷的,当有其中一个Promise变成rejected状态时,新Promise就会立即变成对应的reject状态,也就是只能在catch中捕获到错误,其他fulfilled状态的值我们是拿不到的。因此有了allSettled方法

2.allSettled

allSettled是在ES11(2025)中添加的新的API,Promise.allSettled

该方法会在所有的Promise都有结果时(无论是fulfilled,还是rejected)都会在then方法中拿到我们的最终的结果:

constp1=newPromise((resolve,reject)={

constobj={data:11111}

setTimeout(()={

resolve(obj)

},3000)

constp2=newPromise((resolve,reject)={

constobj={data:22222}

setTimeout(()={

reject(obj)

},2000)

constp3=newPromise((resolve,reject)={

constobj={data:33333}

setTimeout(()={

resolve(obj)

},1000)

Promise.allSettled([p1,p2,p3]).then(result={

console.log(result)

}).catch(err={

console.log(err:,err)

})

我们传入了三个Promise,在2s的时候我们的p2就reject拒绝了,但是我们同样可以拿到结果,但是这个result结果数组结构有点儿变化,我们看下打印结果:

我们可以看到allSettled的结果是一个数组,数组中存放着每一个Promise的结果,并且是对应一个对象的;这个对象中包含status状态,以及对应的value值

3.race

race是竞技、赛跑的意思,也就是谁先有结果我就要谁,这个result拿到的结果就不是一个数组了,而是最快的一个Promiseresolve出来的结果

constp1=newPromise((resolve,reject)={

constobj={data:

文档评论(0)

1亿VIP精品文档

相关文档