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循环发送请求控制并发数的资料请关注脚本之家其它相关文章!