码迷,mamicode.com
首页 > 其他好文 > 详细

手动实现Promise.all()

时间:2020-02-18 23:25:14      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:set   fun   UNC   实现   new   style   bsp   sea   nbsp   

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)
})

 

手动实现Promise.all()

标签:set   fun   UNC   实现   new   style   bsp   sea   nbsp   

原文地址:https://www.cnblogs.com/ayujun/p/12329294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!