Async & Promisesmedium
Implement Promise.all(promises)
Implement `Promise.all` from scratch. It should resolve with an array of results when all promises resolve, and reject immediately if any promise rejects.
Asked at Meta, TikTok, Apple, Amazon
Answer
function promiseAll(promises) { return new Promise((resolve, reject) => { if (promises.length === 0) return resolve([]) const results = new Array(promises.length) let remaining = promises.length promises.forEach((promise, i) => { Promise.resolve(promise).then((value) => { results[i] = value remaining -= 1 if (remaining === 0) resolve(results) }).catch(reject) // first rejection wins }) }) } // Test promiseAll([ Promise.resolve(1), Promise.resolve(2), Promise.resolve(3), ]).then(console.log) // [1, 2, 3] promiseAll([ Promise.resolve(1), Promise.reject('error'), ]).catch(console.error) // 'error'
Source: frontendinterviewhandbook.com