关于前端:限制数量请求池函数实现

6次阅读

共计 705 个字符,预计需要花费 2 分钟才能阅读完成。

// 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();});
  }
}
正文完
 0