Promise.all 接收一个数组,只有数组内各项状态都变成 Fulfilled状态时 ,Promise.all 的状态才会变成 Fulfilled;只要有一项被 Rejected,Promise.all就会变成 Rejected;
Promise.race 也接受一个 Promise 对象的数组,但是只要一项状态改变,Promise.race 状态就会改变。
示例:
let p1 = new Promise((resolve,reject) => {
resolve('p1');
});
let p2 = new Promise((resolve,reject) => {
resolve('p2');
})
Promise.all([p1,p2]).then(res => {
console.log(res);
})
// ['p1','p2']
Promise.race([p1,p2]).then(res => {
console.log(res);
})
// p1
使用 Promise 实现简单的 all
function promiseAll(promises) {
return new Promise((resolve,reject) => {
let count = 0;
let len = promises.length;
let res = new Array(len);
for (let i=0;i<len;++i) {
// 如果promise.all 中传入的不全是promise对象,而是简单类型变量时,
// 需要通过Promise.resolve() 将它转成 promise对象
Promise.resolve(promises[i]).then(value => {
count ++;
res[i] = value;
if (count === len) {
return resolve(res);
}
}).catch(error => {
reject(error);
})
}
})
}