function promiseAll1(promiseArr) { return new Promise(function (resolve, reject) { if (!(promiseArr instanceof Array)) { throw new TypeError("promiseArr must be an Array"); } let resArr = []; // 存放结果 let index = 0; if (promiseArr.length === 0) resolve(resArr); for (let i in promiseArr) { Promise.resolve(promiseArr[i]) .then( (res) => { resArr[i] = res; // 存每次结果 index++; // 数组函数全执行完,便返回 if (index === promiseArr.length) { return resolve(resArr); } }, (err) => { return reject(err); } ) .catch((err) => { console.log(err); }); } }); } function promiseAll2(promiseArr) { let resArr = []; //用于存放每次执行后返回结果 return new Promise(function (resolve, reject) { let i = 0; next(); // 开始逐次执行数组中的函数 function next() { promiseArr[i].then(function (res) { resArr.push(res); // 存储每次得到的结果 i++; if (i == promiseArr.length) { // 如果函数数组中的函数都执行完,便resolve resolve(resArr); } else { next(); } }); } }); } function promiseAll3(promiseArr) { return new Promise((resolve, reject) => { let index = 0; let resArr = []; if (promiseArr.length === 0) { resolve(resArr); } else { for (let i = 0; i < promiseArr.length; i++) { Promise.resolve(promiseArr[i]).then( (data) => { resArr[i] = data; if (++index == promiseArr.length) { console.log(index); resolve(resArr); } }, (err) => { reject(err); return; } ); } } }); } // p1, p2, p3 var p1 = new Promise((resolve, reject) => { resolve("111"); }); var p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve("222"); }, 2000); }); var p3 = new Promise((resolve, reject) => { resolve("333"); }); // 调用 const start = new Date(); promiseAll1([p1, p2, p3]).then((res) => { console.log(res); const ms = new Date() - start; console.log(`time - ${ms}ms`); }); promiseAll2([p1, p2, p3]).then((res) => { console.log(res); const ms = new Date() - start; console.log(`time - ${ms}ms`); }); promiseAll3([p1, p2, p3]).then((res) => { console.log(res); const ms = new Date() - start; console.log(`time - ${ms}ms`); }); Promise.all([p1, p2, p3]).then((res) => { console.log(res); const ms = new Date() - start; console.log(`time - ${ms}ms`); });

实现 Promise.all 函数
文章版权及转载声明
作者:问几许本文地址:https://wenjixu.com/blog/145.html发布于 3年前 ( 2020-04-20 )
文章转载或复制请以超链接形式并注明出处问几许
还没有评论,来说两句吧...