当前位置: 首页 > news >正文

批量下载,控制并发(利用promise 做需求池队列)

思路: 利用Promise模拟任务队列,从而实现请求池效果。

  1. handQueue 函数:

    参数: reqs 是一个数组,包含了要处理的请求的总数。 默认值处理: reqs 如果为空,则赋值为空数组 []。
    requestQueue 函数: 创建一个请求队列,并控制最大并发数。

  2. requestQueue 函数:

    参数: concurrency 控制最大并发数,默认为 6。 变量: queue: 存储待处理的请求工厂函数。 current:
    当前并发请求数。

  3. dequeue 函数: 用于处理队列中的请求,确保并发数不超过 concurrency。 返回函数:
    返回一个函数,该函数将请求工厂函数加入队列并触发 dequeue。 请求处理:

使用 enqueue 函数将请求工厂函数加入队列,并启动处理。

import axios from 'axios';export const handQueue = (reqs = [], concurrency = 6) => {const requestQueue = (concurrency) => {const queue = [];let current = 0;const dequeue = () => {while (current < concurrency && queue.length) {current++;const requestPromiseFactory = queue.shift();requestPromiseFactory().then(response => {// 处理成功的请求console.log('Response:', response);}).catch(error => {// 处理失败的请求console.error('Error:', error);}).finally(() => {current--;dequeue();});}};return (requestPromiseFactory) => {queue.push(requestPromiseFactory);dequeue();};};const enqueue = requestQueue(concurrency);for (let i = 0; i < reqs.length; i++) {enqueue(() => axios.get(`/api/test${i}`));}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何理解基于架构的软件设计(ABSD)
  • TMS320F28335芯片及使用介绍
  • 不到200行代码,一键写出简单贪吃蛇网页游戏!附详细代码!快来看看吧!
  • QML学习二:Qt启用qml文件实时预览编辑,以及打印日志到控制台
  • 【开源大模型生态5】解放大脑
  • 1034. 边界着色(JAVA)
  • SpringCloud之CircuitBreaker
  • 面试场景题
  • 使用 uni-app 开发微信小程序:深入教程与技巧
  • SpringCloud:Gateway
  • (Charles)如何抓取手机http的报文
  • Python Flask_APScheduler定时任务的正确(最佳)使用
  • Linux命名管道
  • 前端面试热点题目——typescript篇
  • 【高阶数据结构】二叉树的创建、存储方式(顺序与链式)、遍历方法(递归与非递归)(精美图解+完整代码)
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android 控件背景颜色处理
  • JAVA 学习IO流
  • Java小白进阶笔记(3)-初级面向对象
  • JS变量作用域
  • Linux链接文件
  • PHP面试之三:MySQL数据库
  • QQ浏览器x5内核的兼容性问题
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue脚手架vue-cli
  • Webpack 4x 之路 ( 四 )
  • 给初学者:JavaScript 中数组操作注意点
  • 关于 Cirru Editor 存储格式
  • 记一次删除Git记录中的大文件的过程
  • 简单基于spring的redis配置(单机和集群模式)
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前嗅ForeSpider教程:创建模板
  • 使用docker-compose进行多节点部署
  • 消息队列系列二(IOT中消息队列的应用)
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​iOS安全加固方法及实现
  • #android不同版本废弃api,新api。
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (6)添加vue-cookie
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (day6) 319. 灯泡开关
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (NSDate) 时间 (time )比较
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (六)Hibernate的二级缓存
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (学习日记)2024.01.09
  • ***监测系统的构建(chkrootkit )
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Remoting学习笔记(三)信道
  • .NET 使用配置文件