javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JS循环发送请求控制并发数

JS循环发送请求时控制请求并发数实例

作者:Victory

这篇文章主要介绍了JS循环发送请求时控制请求并发数实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

准备数据,调用方法

let data = [{ name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }];
  LimitFunc(data, service, 2);

属性注释

//data:请求所需参数,service:请求回调名称,LimitNum 并发数量

const LimitFunc = async (data, service, LimitNum) => {
  const arrList = []; // 所有的promise
  const running = []; // 正在执行的promise
  for (const item of data) {
    const p = Promise.resolve(service(item)); // Promise.resolve回调函数
    arrList.push(p);
    if (LimitNum <= data.length) {
      // then回调中,当这个promise状态变为fulfilled后,将其从正在执行的promise列表running中删除
      const e = p.then(() => running.splice(running.indexOf(e), 1));
      running.push(e);
      if (running.length >= LimitNum) {
        // running的数量等于限制数时,Promise.race等待某一个promise状态发生变更,
        // 变更后,执行then的回调,将当前promise从running中删除,从下一次for循环中生成新的promise进入running
        await Promise.race(running);
      }
    }
  }
  return Promise.all(arrList);
};

axios请求

function service(item) {
  return new Promise((resolve) => {
    // axios成功
    axios('url', item).then(() => {
      resolve();
    });
  });
}

以上就是JS循环发送请求时控制请求并发数实例的详细内容,更多关于JS循环发送请求控制并发数的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文