Edit in JSFiddle

Promise.all = function(promises) {
  let results = [];
  return new Promise((resolve, reject) => {
    // check if array has any promise
    if (!promises.length) {
      resolve(results);
      return;
    }

    promises.forEach((p, index) => {
      p.then((result) => {
        results.push(result);
        if (index === promises.length - 1) {
          resolve(results);
        }
      }).catch((err) => reject(err));
    });
  });
};

let promises = [
  Promise.resolve(1),
  Promise.resolve('this is 2nd'),
  new Promise((resolve, reject) => setTimeout(resolve, 800, '3rd')),
];


Promise.all(promises).then((result) => {
  console.log('Promise results', result);
});