手写promise.all,promise.race方法

发布于:2022-12-17 ⋅ 阅读:(857) ⋅ 点赞:(0)

1.promise .all手写
Promise.all 方法接受一个数组作为参数,
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.all = function(promises) {
    return new Promise((resolve, reject) => {
        //声明计数变量
        let count = 0;
        //声明数组保存promise数组返回结果
        let arr = [];
        for (let i = 0; i < promises.length; i++) {
            //既然是一个promise对象,一定可以调用then方法
            promises[i].then(v => {
                //如果成功就调用这个回调函数
                //得知对象状态是成功
                //每个promise对象都成功,才可以调用
                count++;
                //将当前promise成功对象存入数组中
                arr[i] = v;
                //判断
                if (count === promises.length) {
                    //都成功就可以调用成功函数
                    resolve(arr);
                }
            }, r => {
                reject(r);
            })
        }
    })
}

2.promise.race方法手写
p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的返回值。

Promise.race = function(promises) {
    return new Promise((resolve, reject) => {
        for (let i = 0; i < promises.length; i++) {
            promises[i].then(v => {
                resolve(v)
            }, r => {
                reject(r)
            })
        }
    })
}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到