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