js
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```javascript []\n/**\n * @param {Array<Function>} functions\n * @return {Promise<any>}\n */\nvar promiseAll = function (functions) {\n    if (!functions.length) return []\n    const result = []\n    let completed = 0\n\n    return new Promise((resolve, reject) => {\n        for (let promiseIndex in functions) {\n            functions[promiseIndex]().then(value => {\n                result[promiseIndex] = value\n                completed += 1\n\n                if (completed === functions.length) {\n                    resolve(result);\n                }\n            }).catch(error => reject(error))\n        }\n\n    })\n\n\n};\n\n/**\n * const promise = promiseAll([() => new Promise(res => res(42))])\n * promise.then(console.log); // [42]\n */\n```
['JavaScript']