手动实现Promise.all()
Posted ayujun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手动实现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) })
以上是关于手动实现Promise.all()的主要内容,如果未能解决你的问题,请参考以下文章
使用 Promise.all() 在 Promise 实现时执行操作