前端开发Kingcean 2020-02-18
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) })