简易 all 与 race

308 阅读1分钟

all

我们知道,all 接受 promise 对象组成的数组,所有 promise 成功,才表现为成功,一个 promise 失败则整体失败。返回值也是 promise 数组

Promise.prototype._all=function(arr){
    let list=[]
    return new Promise((resolve,reject)=>{
           for(let i=0;i<arr.length;i++){
                arr[i].then(res=>{
                        list.push(res)
                        list.length===arr.length && resolve(list)
                    },err=>{  
                        reject(err)
            })
        } 
    })
}

race

race 的处理方式是以第一个解决的 promise 为结果,无论成功与否

Promise.prototype._race=function(arr){
    let success=false
    let error=false
    return new Promise((resolve,reject)=>{
        for(let i=0;i<arr.length;i++){
            arr[i].then(res=>{
                !success && !error && resolve(data)
                success=true
            },err=>{
                !error && !success && reject(err)
                error=true
            })
        }
    })
}