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?