1. Promise.all
等待所有的Promise处理完以后,才返回数据,返回时间是处理Promise中耗时最长的那个。
let a = {};
// 传入待处理的Promises, 注意传入的值有可能不全是Promise, 有可能是数值常量等
a.all = function (promises) { // 只考虑传入为数组的情况
const len = promises.length;
return new Promise((resolve, reject) => {
if (len === 0) {
resolve([]);
} else {
let result = []; // 用于存储处理结果
let count = 0; // 记录已成功的次数
for (let i = 0; i < len; i++) {
Promise.resolve(promises[i]) //用Promise.resolve处理传入的非Promise值
.then(data => {
result[i] = data;
if (++count === len) resolve(result);
}, err => {
reject(err);
})
}
}
})
}
2. Promise.race
race意为竞争的意思,表示返回数据为处理时间最短的那个Promise
a.race = function (promises) {
const len = promises.length;
return new Promise((resolve, reject) => {
for (let i = 0; i < len; i++) {
Promise.resolve((promises[i])
.then(data => {
resolve(data);
}), err => reject(err));
}
});
}