promise.all polyfill

by crackingthefrontendinterview

JavaScript

// create a sample promise
function task(time) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve(time);
    }, time);
  });
}

const taskList = [task(1000), task(5000), task(3000)];

function newPromiseAll(promises) {
  const result = [];
  let i = 0;

  return new Promise((resolve, reject) => {
    promises.forEach((promise, idx) => {
      promise.then(resp => {
          result[idx] = resp;
          i++;
          if (promises.length === i) {
            resolve(result);
          }
        })
        .catch(err => reject(err))
    })
  })

}


newPromiseAll(taskList)
  .then(resp => {
    console.log("Response : ", resp)
  }, err => {
    console.log(err)
  })