一、静态方法
Promise的静态方法有all、allSettled、race、any、resolve、reject
注:本文中为方便起见,会统一称promise的reslove走then,reject走catch
1-1.Promise.all
下面模拟三个异步请求
let p1 = () => {return new Promise((resolve, reject) => {setTimeout(() => {console.log(1);resolve(1)}, 1000);})}let p2 = () => {return new Promise((resolve, reject) => {setTimeout(() => {console.log(2);resolve(2)}, 2000);})}let p3 = () => {return new Promise((resolve, reject) => {setTimeout(() => {console.log(3);resolve(3)}, 3000);})}
需要等三个console.log完再打印一个4;这里就可以使用到Promise.all
Promise.all([p1(), p2(), p3()]).then(res => {console.log(res)console.log(4)}).catch(err => {console.log(`执行错误,错误信息${err}`)})
Promise.all会等数组内所有的promise都resolve了才会走then,并且会在then中返回一个数组,里面包含所有promise的resolve结果。
如果中间例如p2 reject了,则不会走then(可以看到没有打印4),会走到catch,并且立刻打印出第一个promise的reject信息(2后面紧跟着错误信息)。
1-2.Promise.allSettled
allSettled没有catch, 它不关心成功或者失败,而是记录所有promise结果
记录p1 resolve、p2 reject、p3 resolve 的结果情况
allSettled会返回一个数组,里面对象有个status,如果是成功则是value,失败则为reason;
它不关心promise的成功或失败,这是它与all的最大差别
1-3.Promise.race
Promise.race与all刚好相反,它专门记录数组中第一个promise结果,第一个promise是resolve就立即执行then方法,第一个promise结果为reject,就立即执行reject
记录p1 resolve、p2 reject、p3 resolve 的结果情况;
记录p1 reject、p2 resolve、p3 resolve 的结果情况
1-4.Promise.any
与Promise.race类似,但不会因为一个Promise变成rejected状态而结束,只要存在resolve都会执行then,返回那个resolve的结果。如果都是reject,最后会返回下面结果。
