1. 实现代码
function customPromiseAll(promises) {
return new Promise((resolve, reject) => {
if (promises.length === 0) {
resolve([]);
return;
}
const results = [];
let completedCount = 0;
promises.forEach((promise, index) => {
Promise.resolve(promise).then(
value => {
results[index] = value;
completedCount++;
if (completedCount === promises.length) {
resolve(results);
}
}).catch(error => {
reject(error);
});
});
});
}
customPromiseAll([
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3)
]).then(console.log);
customPromiseAll([1, 2, Promise.resolve(3)]).then(console.log);
customPromiseAll([]).then(console.log);
customPromiseAll([Promise.resolve(1), Promise.reject('error')]) .catch(console.error);