Skip to content

Instantly share code, notes, and snippets.

@rabindranathfv
Created February 3, 2023 10:49
Show Gist options
  • Select an option

  • Save rabindranathfv/b22a8820cad3a8f80715f321447a6fe2 to your computer and use it in GitHub Desktop.

Select an option

Save rabindranathfv/b22a8820cad3a8f80715f321447a6fe2 to your computer and use it in GitHub Desktop.
Promise.all solution like pollyfills
const p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'one');
});
const p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, 'two');
});
const p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'three');
});
const p4 = new Promise((resolve, reject) => {
setTimeout(resolve, 4000, 'four');
});
const p5 = new Promise((resolve, reject) => {
reject('reject');
});
const p6 = new Promise((resolve, reject) => {
reject('reject');
});
// const output = Promise.all([p1, p2, p3, p4, p5])
// .then((res) => {
// console.log(res);
// })
// .catch((err) => {
// console.log(err);
// });
// console.log('RESULT', output);
const promiseAllV2 = (promises) => {
let finishPromises = [];
return new Promise((resolve, reject) => {
if (promises.length === 0) {
resolve(finishPromises);
}
for (const promise of promises) {
promise
.then((p) => {
finishPromises.push(p);
if (finishPromises.length === promises.length) {
resolve(finishPromises);
}
})
.catch((err) => {
reject(err);
});
}
});
};
// async/await on manipulation all promises
const promiseAllV3 = (promisesArr) => {
return new Promise((resolve, reject) => {
if (promisesArr.length === 0) {
resolve([]);
return;
}
promisesArr.reduce(async (acc, next, index) => {
try {
if (index === promisesArr.length - 1) {
const fullfiedProm = await (await acc).concat([await next]);
resolve(fullfiedProm);
return;
}
return await (await acc).concat([await next]);
} catch (err) {
reject(err);
}
}, []);
});
};
const promiseAllV4 = (promisesArr) => {
let resultArr = [];
return new Promise((resolve, reject) => {
if (promisesArr.length === 0) {
resolve([]);
return;
}
promisesArr.map(async (promise, index) => {
try {
await resultArr.push(await promise);
if (index === promisesArr.length - 1) {
resolve(resultArr);
return;
}
} catch (err) {
reject(err);
}
});
});
};
// const salida = promiseAll([p1, p2, p3, p4]);
// console.log('salida', salida);
// const salida2 = promiseAllV2([p1, p2, p3, p4])
// .then((res) => {
// console.log('resolved value salida2', res);
// })
// .catch((err) => {
// console.log('reject del promiseALLV2', err);
// });
// const salida4 = promiseAllV2([p1, p2, p3, p4, p5])
// .then((res) => {
// console.log(res);
// })
// .catch((err) => {
// console.log('reject del promiseALLV2 salida4', err);
// });
// const salida3 = promiseAllV2([])
// .then((res) => {
// console.log('resolved value salida3', res);
// })
// .catch((err) => {
// console.log('reject del promiseALLV2', err);
// });
// const salida5 = promiseAllV3([p1, p2, p3, p4])
// .then((res) => {
// console.log('resolved value salida5', res);
// })
// .catch((err) => {
// console.log('reject salida5 del promiseALLV3', err);
// });
// const salida6 = promiseAllV3([p6, p1, p2, p3, p4, p5])
// .then((res) => {
// console.log('resolved value salida6', res);
// })
// .catch((err) => {
// console.log('reject salida6 del promiseALLV3', err);
// });
const salida7 = promiseAllV4([p1, p2, p3, p4])
.then((res) => {
console.log('resolved value salida7', res);
})
.catch((err) => {
console.log('reject salida7 del promiseALLV3', err);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment