SOURCE

Promise.all2 = function (iterators) {
    return new Promise((resolve, reject) => {
        if (!iterators || iterators.length === 0) {
            resolve([])
        } else {
            // 计算器,用于判断所有任务是否执行完成
            let count = 0;
            // 结果数组
            let result = [];
            // 执行数组长度
            let len = iterators.length
            for (let i = 0; i < len; i++) {
                // 考虑到iterators[i]可能是普通对象,则统一包装为Promise对象
                Promise.resolve(iterators[i]).then((data) => {
                    // 按顺序保存对应的结果
                    result[i] = data;
                    // 判断++count 的次数是否等于 传入执行数组的长度
                    if (++count === len) {
                        resolve(result);
                    }
                }, (err) => {
                    // 任何一个Promise对象执行失败,则调用reject()方法
                    reject(err);
                })
            }
        }
    })
}
const f1 = new Promise((resolve, reject) => {
    console.log('enter f1')
    resolve('f1')
})

const f2 = new Promise((resolve, reject) => {
    console.log('enter f2')
    reject('err')
})
const f3 = new Promise((resolve, reject) => {
    console.log('enter f3')
    resolve('f3')
})

Promise.all2([f1, f2, f3]).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
console 命令行工具 X clear

                    
>
console