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

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

看了前端很多文章我感觉并发不应该只是控制几个接口去发送,应该考虑到每个接口完成的时间是不同的,所以今天我试着写了一个如果并发中接口完成了请求就继续发送其他接口的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.jsqmd.com/news/27818/

相关文章:

  • Linux 交叉编译(toolchain) ARM 版 lib pcap.so 库
  • Codeforces Pinely Round 5(div.1 + div.2) A~D题解
  • Linux 交叉编译(toolchain) ARM版 libc.so 库
  • revit api事件
  • 《我测了5个排版工具后,终于把时间还给了内容创作》
  • EDKII工程结构介绍
  • 《程序员修炼之道:从小工到专家》读后感3
  • Vue3组件代码编写遵循1.0
  • 《程序员修炼之道:从小工到专家》读后感2
  • 《程序员修炼之道:从小工到专家》读后感1
  • 2025西南地区优质温室大棚厂家精选推荐:深度解析重庆青程技术实力!蔬菜大棚厂家推荐
  • 通义灵码助力美图构建AI驱动研发体系,助力提升研发能效和流程智能化
  • 2025修护/二硫化硒去屑/香氛/控油蓬松/ 洗发水推荐榜:MASIL 玛丝兰(悦己容)五星领跑!长效去屑 + 温和修护,3 牌凭特色突围​
  • 数列分块学习笔记(锣鼓梳理额粉筷入门模板)
  • 2025凝汽器/换热器/空预器/板式换热器/管式换热器/空冷岛/电磁脉冲/胶球/热网加热器/低低温省煤器/清洗设备/服务推荐榜:郑州赛为机电五星领跑!在线清洗 + 定制化,3 企凭特色突围​
  • claude-ide搭建
  • MySQL性能分析(四)之processlist详解
  • 2025年5310/6479/高压合金管厂家推荐榜:天津大无缝联合钢铁五星领跑!多材质适配 + 工业攻坚,3 企凭高端 / 特种 / 大口径显优势​
  • 类命名空间中“同名成员的覆盖规则”和“属性查找时的递归陷阱”
  • 2025年旋转接头标杆厂家最新推荐:多通路旋转接头/水用旋转接头/回转旋转接头/H型旋转接头/液压旋转接头/旭康机械,定义工程机械与工业传热领域可靠性新标准
  • mysql主从配置(保姆级) - 指南
  • 打开浏览器
  • 印度实时股票数据源接口对接文档-IPO新股、k线数据
  • 尝试从源头理解 SVD 原理和计算
  • activemqCVE-2016-3088漏洞复现
  • FortiGuard实验室互联网服务安全技术解析
  • 神舟二十一号|2030年前实现中国人登陆月球的目标不动摇
  • 博客园打印 - miao
  • Python文件操作(下)_ 会写文件,程序便有了记忆
  • Python文件操作(上)_ 会读文件,程序便有了眼睛