1.promise.all
function promiseAll(promises) {
return new Promise(function (resolve, reject) {
if (!Array.isArray(promises)) {
return reject(new TypeError("入参必须是数组"));
}
let resolvedCount = 0;
let len = promises.length;
let resolvedValues = new Array(len);
for (let i = 0; i < len; i++) {
Promise.resolve(promises[i]).then(
(value) => {
resolvedCount++;
resolvedValues[i] = promises[i];
if (resolvedCount === len) {
return resolve(resolvedValues);
}
},
(err) => {
return reject(err);
}
);
}
});
}
2.Promise.race
function promiseRace(promises) {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
return reject(new TypeError("入参必须是数组"));
}
promises.forEach((value) => {
Promise.resolve(value).then(
(res) => {
return resolve(res);
},
(err) => {
return reject(err);
}
);
});
});
}
3.Promise.any
function promiseAny(promises) {
return new Promise((resolve, reject) => {
promises = Array.isArray(promises) ? promises : [];
let len = promises.length;
let errs = [];
if (len === 0)
return reject(new AggregateError("All promises were rejected"));
promises.forEach((promise) => {
promise.then(
(value) => {
resolve(value);
},
(err) => {
len--;
errs.push(err);
if (len === 0) {
reject(new AggregateError(errs));
}
}
);
});
});
};