function myPromiseAll(promises) {
return new Promise((resolve, reject) => {
const results = new Array(promises.length);
let count = 0;
promises.forEach((promise, index) => {
promise.then(result => {
results[index] = result;
count++;
if (count === promises.length) {
resolve(results);
}
}).catch(error => {
reject(error);
});
});
});
}
在上述代码中,我们定义了一个 myPromiseAll 函数,它接受一个 Promise 对象数组作为参数,并返回一个新的 Promise 对象。在该函数内部,我们定义了一个 results 数组来保存所有 Promise 对象的结果,定义了一个 count 变量来记录已完成的 Promise 对象个数。
然后,我们通过 forEach 方法遍历所有的 Promise 对象,并为每个 Promise 对象绑定成功回调和失败回调。当一个 Promise 对象成功时,将其成功结果放入 results 数组中,并增加 count 变量的值。当 count 的值等于 Promise 对象数组的长度时,说明所有的 Promise 对象都已完成,此时将 results 数组作为新的 Promise 对象的成功结果,调用 resolve 方法并传入该数组。当一个 Promise 对象失败时,直接调用 reject 方法并传入该 Promise 对象的失败原因。