手動實現Promise.all()


Promise.all()方法用於將多個 Promise 實例,包裝成一個新的 Promise 實例。

Promise.all()方法的參數可以不是數組,但必須具有 Iterator 接口,且返回的每個成員都是 Promise 實例。如果有成員不是Promise實例,就會先調用下面講到的Promise.resolve方法,將參數轉為 Promise 實例,再進一步處理。

我們來實現一下

function Promiseall(promises){
    const iterator=Symbol.iterator
    if(!promises[iterator])return;
    return new Promise((resolve,reject)=>{
        const resolvearr=[];
        const rejectarr=[];
        for(let i of promises){
            if(!(i instanceof Promise)){
                i=Promise.resolve(i)
            }
            i.then(res=>{
                resolvearr.push(res)
            })
            .catch(err=>{
                rejectarr.push(err)
            })
        }
        setTimeout(()=>{
            return rejectarr.length===0?resolve(resolvearr):reject(rejectarr[0])
        })
    })
}
const p1=new Promise(res=>res(1))
const p2=new Promise((res,rej)=>rej(2))
const p3=new Promise((res,rej)=>rej(3))
const p4='4'
const su=x([p1,p2,p3,p4])
su.then(res=>{
    console.log(res)
})
.catch(res=>{
    console.log(res)
})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM