Q18 [Coding]: Implement a simple polyfill for Promise.all().
function myPromiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let completed = 0;
if (promises.length === 0) return resolve([]);
promises.forEach((p, index) => {
Promise.resolve(p)
.then(val => {
results[index] = val;
completed++;
if (completed === promises.length) resolve(results);
})
.catch(reject);
});
});
}
Key Takeaways
- Tracks completed promise counts against total length.
- Preserves array output index placement matching original input ordering.
Knowledge Check
Why is results[index] = val used instead of results.push(val) in Promise.all polyfills?