前端面试官大佬们似乎很爱问这道题,以下是小弟经过查阅资料,自己经过深思熟虑又做了一些小的修改后得出的结果。初步测试可用,但不敢保证所有极端情况都没问题。小弟一直好奇到底有没有人能在面试那种容易紧张、时间有限、又没有见过这道题的情况下能准确无误的写出来,如果有,请受小弟一拜🤣
Promise.myAll = function (promises) {
// 参数promises是空数组的情况:
if (Array.isArray(promises) && promises.length === 0) {
return Promise.resolve(promises);
}
return new Promise((resolve, reject) => {
const results = [];
let resolvedCount = 0;
promises.forEach((promise, i) => {
// 用Promise.resolve包一下,因为传入的不一定都是Promise,如:Promise.all([1, 2, 3]);
Promise.resolve(promise)
.then((value) => {
results[i] = value;
resolvedCount++;
if (resolvedCount >= promises.length) {
resolve(results);
}
})
.catch((error) => {
reject(error);
});
});
});
};