SOURCE

Promise.myAll = (promises) => {
    return new Promise((rs,rj )=> {
        const resultArr = [];
        const len = promises.length;
        let count = 0;
        if (len === 0) {
            rs([]);
        }
        promises.forEach((p ,index) =>{
            Promise.resolve(p).then(res =>{
                resultArr[index] = res;
                count ++;
                if (count === len) {
                    rs(resultArr);
                }
            }).catch(rj)
        })
    });
}

// test
const p1 = Promise.resolve(1)
const p2 = new Promise((resolve) => {
  setTimeout(() => resolve(2), 1000)
})
const p3 = new Promise((resolve) => {
  setTimeout(() => resolve(3), 3000)
})

const p4 = Promise.reject('err4')
const p5 = Promise.reject('err5')
// 1.   所有的Promise都成功了
const p11 = Promise.myAll([ p1, p2, p3 ])
	.then(console.log) // [ 1, 2, 3 ]
      .catch(console.log)
      // 2. 有一个Promise失败了
const p12 = Promise.myAll([ p1, p2, p4 ])
	.then(console.log)
      .catch(console.log) // err4
      // 3. 有两个Promise失败了,可以看到最终输出的是err4,第一个失败的返回值
const p13 = Promise.myAll([ p1, p4, p5 ])
	.then(console.log)
      .catch(console.log) // err4
// 与原生的Promise.all返回是一致的  


console 命令行工具 X clear

                    
>
console