记录一下,关于前端控制并发的思路

news/2025/10/31 18:32:28/文章来源:https://www.cnblogs.com/delete-7s/p/19180961

看了前端很多文章我感觉并发不应该只是控制几个接口去发送,应该考虑到每个接口完成的时间是不同的,所以今天我试着写了一个如果并发中接口完成了请求就继续发送其他接口的js ,简单测试了一下感觉没问题,还请各位提个建议

 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min.js"></script><script>const endpoints = [() =>$.ajax({url: "https://jsonplaceholder.typicode.com/todos/1",method: "GET",dataType: "json",}),() =>$.ajax({url: "https://jsonplaceholder.typicode.com/todos",method: "GET",dataType: "json",}),() =>$.ajax({url: "https://jsonplaceholder.typicode.com/photos",method: "GET",dataType: "json",}),() =>$.ajax({url: "https://dog.ceo/api/breeds/image/random111",method: "GET",dataType: "json",}),() =>$.ajax({url: "https://jsonplaceholder.typicode.com/todos/4",method: "GET",dataType: "json",}),() =>$.ajax({url: "https://jsonplaceholder.typicode.com/todos/5",method: "GET",dataType: "json",}),];function parallelLimit(taskFns, limit) {const length = taskFns.length;// 1) 空数组快速返回if (length === 0) return Promise.resolve([]);// 2) 并发数校验if (!Number.isInteger(limit) || limit < 1) {return Promise.reject(new Error("并发数必须为正整数"));}//3)  判断当前执行结果会有多少个
            const results = new Array(length);let completed = 0; //记录执行了多少次
            let nextIndex = 0; //记录下一次执行的索引return new Promise((resolve, reject) => {// 创建runNext函数function runNext() {// 如果下一次执行的索引大于等于数组长度,返回if (nextIndex >= length) return;// 获取当前执行的索引
                    const current = nextIndex++;Promise.resolve()//  开始执行任务
                        .then(() => taskFns[current]())// 成功后走这里
                        .then((res) => {results[current] = { status: "成功", res };completed++;})//失败后走这里
                        .catch((error) => {results[current] = { status: "失败", error };completed++;})// 无论成功还是失败,都会走这里
                        .finally(() => {if (completed >= length) {resolve(results);} else {runNext();}});}//  判断一下limit 是否大于length
 const starters = Math.min(limit, length);for (let i = 0; i < starters; i++) runNext();});}function main() {const concurrency = 2;console.log("开始请求, 并发数 =", concurrency);parallelLimit(endpoints, concurrency).then((results) => {console.log("全部完成, 结果如下:");console.log(results);});}main();</script>
</body></html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/952115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 交叉编译(toolchain) ARM 版 lib pcap.so 库

前言全局说明libpcap.so 编译一、说明 环境: CentOS Linux 7 (Core) Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux二、下载源码: 官网:…

Codeforces Pinely Round 5(div.1 + div.2) A~D题解

写在开头 有不足的地方各位佬多多指教呀! 持续更新(bushi) A 题面 给定李华的初始rating \(R\) ,div.2的计分上限 \(X\),李华每次rating的变化最大值 \(D\),以及cf比赛的次数 \(n\),问李华最多可以正式参加多少…

Linux 交叉编译(toolchain) ARM版 libc.so 库

前言全局说明编译 libc.so一、说明 环境: CentOS Linux 7 (Core) Kernel 3.10.0-1127.el7.x86_64 on an x86_64二、下载源码: 官网: http://ftp.gnu.org 源码下载: http://ftp.gnu.org/gnu/libc/ 历史版本: http://…

revit api事件

revit api事件DocumentOpened事件public class Application_DocumentOpened : IExternalApplication {public IExternalApplication.Result OnStartup(ControlledApplication application){try{//注册事件application.…

《我测了5个排版工具后,终于把时间还给了内容创作》

《我测了5个排版工具后,终于把时间还给了内容创作》每天在公众号后台调整行间距、寻找合适模板,跨平台发稿时反复复制粘贴,往往要耗费 1-2 小时 —— 作为经常处理排版工作的运营,我实际测试了 5 款编辑器,希望找…

EDKII工程结构介绍

EDK2工程结构介绍一 EDk2开发环境的安装目录一、EDK2工程目录的一级结构 二、常用的目录文件 2.1 BaseTools--构建工具链 2.2 Conf--配置目录 2.3 MdePkg--基础核心包 2.4 MdeModulePkg -- 常用模块包 2.5 OvmfPkg…

《程序员修炼之道:从小工到专家》读后感3

后半部分围绕“成长与协作”展开,描绘了从“合格程序员”到“专家型开发者”的进阶路径。这部分内容跳出了单纯的技术和工具层面,聚焦于职业格局、团队协作和持续成长,让我对“专家”的定义有了全新的认知:真正的专…

Vue3组件代码编写遵循1.0

优秀的Vue组件代码编写应该遵循以下标准:组件设计原则单一职责原则 (Single Responsibility Principle)每个组件只负责一个功能 保持组件的纯粹性和可复用性 避免组件过于臃肿开放封闭原则 (Open-Closed Principle)对…

《程序员修炼之道:从小工到专家》读后感2

中间部分将焦点转向“工具与方法”,为程序员提供了一套可落地的实践指南。如果说前半部分是思想层面的觉醒,这部分就是行动层面的赋能,让我学会运用科学的工具和流程,将“把事做好”的愿望转化为实实在在的能力,深…

《程序员修炼之道:从小工到专家》读后感1

前半部分聚焦“原则与态度”,为初入行业或陷入迷茫的程序员点亮了职业道路的第一盏灯。书中没有堆砌复杂的技术细节,而是从思维模式和工作习惯入手,剖析了成为优秀开发者的核心前提,让我对“程序员”的职业认知实现…

2025西南地区优质温室大棚厂家精选推荐:深度解析重庆青程技术实力!蔬菜大棚厂家推荐

在设施农业快速发展的当下,温室大棚的适配性、耐用性直接关系到种植户的生产效率与收益。为给中小种植户、家庭农场及初创农业项目提供实用参考,结合地域气候适配性、产品实用性、用户口碑等多维度,具优势的温室大棚…

通义灵码助力美图构建AI驱动研发体系,助力提升研发能效和流程智能化

美图公司是一家以 “让艺术与科技美好交汇”为使命的科技创新公司,致力于为用户提供多元化、高质量的美图产品和服务。公司拥有包括美图秀秀、美颜相机、美图设计室、美图云修等在内的多款知名应用。截至2025年6月30日…

2025修护/二硫化硒去屑/香氛/控油蓬松/ 洗发水推荐榜:MASIL 玛丝兰(悦己容)五星领跑!长效去屑 + 温和修护,3 牌凭特色突围​

随着 2025 年消费者对头皮护理的需求从 “短期去屑” 转向 “长效控油、温和修护、屏障保护”,二硫化硒去屑洗发水作为头屑问题的核心解决方案,愈发注重 “浓度科学适配、成分协同增效、场景化护理”。综合去屑长效性…

数列分块学习笔记(锣鼓梳理额粉筷入门模板)

数列分块入门1 我们预处理出每个点所在的区块,预处理每个区块的左端点和右端点。 对于添加操作,我们先判断是否在同一区间,如果是的话就在区间里面暴力重构。 如果不是,那么就对于一整块要处理的区间的左边神域和右…

2025凝汽器/换热器/空预器/板式换热器/管式换热器/空冷岛/电磁脉冲/胶球/热网加热器/低低温省煤器/清洗设备/服务推荐榜:郑州赛为机电五星领跑!在线清洗 + 定制化,3 企凭特色突围​

随着 2025 年核电、火电、化工等高能耗领域对 “清洗设备不停机运行、节能降耗、场景定制化” 需求深化,清洗设备已从 “传统离线清洗” 转向 “在线智能清洗、全工况适配”。综合技术创新性、工况适配度、服务覆盖及…

claude-ide搭建

claude-ide搭建 说明 官方:https://www.claudeide.net/zh 按照之前的搭建好Windows的node.js环境。 步骤 安装 # 安装 Node.js 18+, 然后运行: npm install -g @anthropic-ai/claude-code配置 # cmd控制台设置 set AN…

MySQL性能分析(四)之processlist详解

一、概述 进程列表表(information_schema.processlist表或SHOW PROCESSLIST命令)是MySQL的核心表之一,用于查看MySQL当前所有的连接进程,帮助管理员监控数据库活动并排查性能问题。 进程列表表是进程信息的来源之一I…

2025年5310/6479/高压合金管厂家推荐榜:天津大无缝联合钢铁五星领跑!多材质适配 + 工业攻坚,3 企凭高端 / 特种 / 大口径显优势​

随着 2025 年化工反应釜、电站锅炉、高端机械等领域对 “合金管耐高温、抗高压、耐腐蚀” 需求升级,产品逐渐从 “通用型” 转向 “场景化材质定制、极端工况适配”。综合材质多样性、性能稳定性、工业适配度及用户口…

类命名空间中“同名成员的覆盖规则”和“属性查找时的递归陷阱”

class Student:score = 100 # 类属性(与方法同名)def score(self): # 方法(与类属性同名)return self.score # 这里的score 指的是score方法吗?是不是因为score方法把类属性score覆盖了?# 访问类属性: prin…

2025年旋转接头标杆厂家最新推荐:多通路旋转接头/水用旋转接头/回转旋转接头/H型旋转接头/液压旋转接头/旭康机械,定义工程机械与工业传热领域可靠性新标准

随着工业自动化程度不断深化及设备精密性要求持续提高,作为关键基础零部件的旋转接头,其性能稳定性、密封可靠性及使用寿命已成为影响整个设备系统运行效率的核心因素。2025年,旋转接头市场在工程机械、橡塑、化工、…