Promise.all和Promise.race看这一篇就够了。

417 阅读1分钟

需要注意的有:Promise.all返回的顺序和输入的顺序一样。

Promise.all

Promise.myAll = function (arr) {
            let result = [];
            let num = 0
            return new Promise((resolve, reject) => {
                for (let i = 0; i < arr.length; i++) {
                    arr[i].then(res => {
                        result[i] = res;
                        num++;
                        if (num === arr.length) resolve(result);
                    }, rej => {
                        reject(rej)
                    })
                }
            })
        }

        //测试
        const p1 = new Promise((res, rej) => {
            setTimeout(() => {
                res('任务1成功')
            }, 1000);
        })

        const p2 = new Promise((res, rej) => {
            setTimeout(() => {
                res('任务2成功')
            }, 500);
        })

        const p3 = new Promise((res, rej) => {
            setTimeout(() => {
                res('任务3失败')
            }, 2000);
        })

        Promise.myAll([p1, p2, p3])
            .then(res => {
                console.log(res);
            }).catch(err => {
                console.log(err);
            })

Promise.race

Promise.myRace = function (arr) {
            return new Promise((resolve, reject) => {
                arr.forEach((item, index) => {
                    item.then(res => {
                        resolve(res)
                    }, rej => {
                        reject(rej)
                    })
                })
            })
        }
        
        //测试
        const p1 = new Promise((res, rej) => {
            setTimeout(() => {
                res('任务1成功')
            }, 1000);
        })

        const p2 = new Promise((res, rej) => {
            setTimeout(() => {
                res('任务2成功')
            }, 50000);
        })

        const p3 = new Promise((res, rej) => {
            setTimeout(() => {
                rej('任务3失败')
            }, 5000);
        })

        Promise.myRace([p1, p3, p2]).then(res => {
            console.log(res);
        }).catch(err => {
            console.log(err);
        })

记录记录!