API
Promise.race()
race(赛跑)Promise.race()将多个promise实例,包装成一个新的promise实例。const p = Promise.race([p1, p2, p3]),p1, p2, p3有一个实例率先改变状态,**p**的状态也跟着改变。率先改变的Promise实例的返回值,就传给p的回调函数。
举例:指定时间内没有获得结果,就将 Promise 的状态变为reject,否则变为resolve。
const p = Promise.race([fetch('xxxx'),new Promise((resolve, reject) => {setTimeout(() => {reject(new Error('request timeout ......'))}, 指定时间)})])p.then(console.log).catch(console.error)// 未超时代码const p = Promise.race([new Promise((resolve, reject) => {setTimeout(() => resolve('OK...'), 3000)}),new Promise(function (resolve, reject) {setTimeout(() => reject(new Error('request timeout ......')), 5000)})]);p.then(console.log).catch(console.error);
Promise.all()
Promise.all()将多个promise实例,包装成一个新的promise实例。Promise.all()参数可以不是数字,但必须具有 Iterator 接口,并且返回的每一个成员必须是 Promise实例。const p = Promise.all([p1, p2, p3]),p的状态由p1, p2, p3来决定,分为两种情况:
p1, p2, p3的状态全是fulfilled时,p的状态才是fulfilled,p1, p2, p3返回值组成的数组,传给p的回调函数。p1, p2, p3中有任意一个状态是rejected,p的状态就是rejected,第一个rejected实例的返回值,传给p的回调函数。
注意:p1, p2, p3中有自己的catch时,不会触发Promise.all()定义的catch方法。原因:执行完catch方法后,实例已经变为resolve了。
