Português Brasil
Sim, sou burro\nPreciso agradecer primeiro ao user @hanoh pois \xE9 basicamente o mesmo c\xF3digo e a explica\xE7\xE3o dele \xE9 fenomenal. H\xE1 alguns problem
- # Sim, sou burro\nPreciso agradecer primeiro ao user **@hanoh** pois \xE9 basicamente o mesmo c\xF3digo e a explica\xE7\xE3o dele \xE9 fenomenal. H\xE1 alguns problemas quando eu tentei fazer de primeira e s\xF3 percebi depois que li o post do hanoh, o primeiro deles \xE9 que fazendo do jeito .push() no final de cada forEach(fn) o array n\xE3o salvaria a posi\xE7\xE3o original de cada fun\xE7\xE3o, pois cada fun\xE7\xE3o possui um tempo \xFAnico e por exemplo a funcao[2] pode acabar primeiro que a funcao[1], tomando seu lugar no index, para resolver isso voc\xEA precisaria criar um array j\xE1 contendo o tamanho do array das fun\xE7\xF5es (new Array(functions.length)) e ao inv\xE9s de simplesmente dar um push() voc\xEA faria igual uma atribui\xE7\xE3o de objetos como o seguinte; functions.forEach((fn, i) => fn() .then((valor) => \narr[i] = valor), dessa forma cada valor ser\xE1 armazenado em sua posi\xE7\xE3o original. Mas quando eu devo resolver a promise? para dar tempo de todas as fun\xE7\xF5es serem executadas voc\xEA pode criar um contador que incrementa a cada resultado e que se(alcan\xE7ar o mesmo numero do tamanho do array de fun\xE7\xF5es) resolve o array criado. Mas e para quando houver um reject? Bom, se houver um reject, ele \xE9 pego pelo catch, pois o mesmo \xE9 considera um error, ent\xE3o quando acontecer isso voc\xEA d\xE1 o catch com o motivo e d\xE1 o reject no motivo, pois a quest\xE3o pede para que se houver 1 reject que seja, mesmo se houver 2 ou alguma outra fun\xE7\xE3o passar, \xE9 para mostrar apenas o reject.\n\n# Escrevi algo errado?\nPor favor, se tiver algo errado me corrija, eu achei esse um bom m\xE9todo para explicar para mim mesmo como funciona o c\xF3digo ent\xE3o eu posso ter falado alguma besteira mas acredito que n\xE3o.\n\n# Code\n```javascript []\n/**\n * @param {Array<Function>} functions\n * @return {Promise<any>}\n */\nvar promiseAll = async function(functions) {\n    return new Promise((resolve, reject) => {\n        const results = new Array(functions.length)\n\n        let count = 0\n        functions.forEach((fn,i) => {\n            fn()\n            .then(result => {\n                count++\n                results[i] = result\n                if(count === functions.length) { resolve(results) }\n            })\n            .catch(mot => reject(mot))\n        })\n})\n}\n/**\n * const promise = promiseAll([() => new Promise(res => res(42))])\n * promise.then(console.log); // [42]\n */\n```
['JavaScript']