Promise手写All方法

128 阅读1分钟
    return new Promise((resolve,reject)=>{
        resNum = 0
        let resArr =  []
        list.forEach(item=> {
            item.then(res=>{
                resArr.push(res)
                resNum ++ 
                if (resNum === list.length) {
                    resolve(resArr)
                }
            })
        });
    })

}

myPromiseAll([p1,p2]).then(res=>{
    console.log(res)
})

手写allSettled()

    setTimeout(() => {
        // resolve('1111')
        reject('3333333')
    }, 1000);
})
var p2  = new Promise((resolve,reject)=>{
    setTimeout(() => {
        resolve('2222')
    }, 2000);
})

// Promise.all([p1,p2]).then((res)=>{
//     console.log(res)
// })

function myPromiseAllSettled(list){
    return new Promise((resolve,reject)=>{
        resNum = 0
        // let resArr =  new Array(list.length)
        let resArr =  []

        list.forEach((item,key)=> {
            item.then(res=>{
                let obj ={
                    status:'fullfilled',
                    value:res
                }
                resArr[key] = obj
                resNum ++ 
                if (resNum === list.length) {
                    resolve(resArr)
                }
            },err=>{
                let obj ={
                    status:'rejected',
                    value:err
                }
                resArr[key] = obj
                resNum ++ 
                if (resNum === list.length) {
                    reject(resArr)
                }
            })
        });
    })

}

myPromiseAllSettled([p1,p2]).then(res=>{
    console.log(res)
})