// function createRequestPool(poolSize) { // } // const request = createRequestPool(3); // for (let i = 0; i < 10000; i++) { // request('/count').then(xxxx).catch(xxx) // } /** * 记笔记,待验证 */ function createRequestPool(poolSize) { const reqs = []; const temps = []; return function (url) { function runTask() { // 循环添加到临时数组中 while (reqs.length && temps.length < poolSize) { temps.push(reqs.shift()); } // 遍历临时数组,发起请求 for (let i = 0; i < temps.length; i++) { fetch(temps[i].url) .then((data) => { // 移除当前请求,并返回结果 temps.splice(temps.indexOf(temps[i]), 1); temps[i].resolve(data); // 每完成一个,就须要执行队列中的任务 runTask(); }) .catch((err) => { // 移除当前请求,并返回结果 temps.splice(temps.indexOf(temps[i]), 1); temps[i].reject(err); }); } } return new Promise((resolve, reject) => { reqs.push({ url, resolve, reject }); runTask(); }); } }