Created
February 3, 2023 10:49
-
-
Save rabindranathfv/b22a8820cad3a8f80715f321447a6fe2 to your computer and use it in GitHub Desktop.
Promise.all solution like pollyfills
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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