news 2026/6/15 8:08:26

前端js实现按添加顺序返回并发异步任务的执行结果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端js实现按添加顺序返回并发异步任务的执行结果

题目:N个并发任务,异步执行,按照任务的添加顺序返回执行结果,而不是谁先执行完返回谁,保证并发任务的执行顺序。

给定下面的代码,要求实现ConRequests类。

//模拟异步请求functionmockRequest(name,delay){returnnewPromise((resolve)=>{setTimeOut(()=>{resolve(`任务{name}完成`)},delay)})}constrequests=newConRequests()constreq1=requests.add(mockRequest('A',3000))constreq2=requests.add(mockRequest('B',1000))constreq3=requests.add(mockRequest('C',2000))req1.then(console.log)//.then() 接收的是一个函数引用。等价于request1.then(((result)=>console.log(result));req2.then(console.log)req3.then(console.log)//输出://任务A完成//任务B完成//任务C完成

思路:
// 使用一个队列(数组)来记录所有已添加的任务 Promise。
// 维护一个 currentIndex 表示当前应返回第几个结果。
// 每个 Promise 完成后,将其结果存入一个结果数组。
// 一旦前面的结果都已就绪,就按顺序 resolve 对应的包装 Promise。

classConRequests{constructor(){this.requests=[]//存放请求{promise, resolve, reject}this.results=[]//存放执行结果this.currentIndex=0//当前能释放结果的索引}add(promise){returnnewPromise((resolve,reject)=>{//index作用:// 保证任务 A(index=0)、任务 B(index=1)、任务 C(index=2)的requests/results下标严格对应;// 即使 B 先完成(results[1] = 结果),但results[0]还是null(A 未完成),tryRelease会卡在currentIndex=0,直到 A 完成后才会依次释放 A、B、C。constindex=this.requests.lengththis.results[index]=null//占位,避免下标错乱this.requests.push(promise,resolve,reject)promise.then((result)=>{this.results[index]=result//更新结果this.tryRelease()//尝试释放已完成的连续结果}).catch((err)=>{this.results[index]=errthis.tryRelease()})})}tryRelease(){while(this.currentIndex<this.requests.length&&this.results[this.currentIndex]!==null){constresult=this.results[this.currentIndex]const{resolve,reject}=this.requests[this.currentIndex]if(resultinstanceofError){reject(result)}else{resolve(result)}this.currentIndex++}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 9:10:50

pose-search:人体姿态检测与动作搜索终极指南

pose-search&#xff1a;人体姿态检测与动作搜索终极指南 【免费下载链接】pose-search x6ud.github.io/pose-search 项目地址: https://gitcode.com/gh_mirrors/po/pose-search 在人工智能技术飞速发展的今天&#xff0c;实时人体姿态检测已成为计算机视觉领域的重要突…

作者头像 李华
网站建设 2026/6/13 21:44:38

揭秘VSCode与量子硬件连接失败原因:90%开发者忽略的3个关键点

第一章&#xff1a;VSCode 量子硬件的连接检测在开发与量子计算相关的应用时&#xff0c;确保本地开发环境能够准确识别并连接远程量子硬件至关重要。Visual Studio Code&#xff08;VSCode&#xff09;作为主流开发工具&#xff0c;通过扩展插件支持对量子设备的状态监测与连接…

作者头像 李华
网站建设 2026/6/14 11:43:13

面试官:缓存淘汰要怎么设计才能保证命中率?

在做后端架构设计中&#xff0c;缓存一直是我优化系统性能手里的头号策略。无论是在高并发的互联网大厂&#xff0c;还是在传统企业的数字化转型项目中&#xff0c;缓存的设计都至关重要。今天我们就来来深度探讨一个在面试中必问&#xff0c;在实际工作中又极容易被忽视的核心…

作者头像 李华
网站建设 2026/6/14 1:16:40

窗口置顶新体验:PinWin让你的工作效率翻倍

窗口置顶新体验&#xff1a;PinWin让你的工作效率翻倍 【免费下载链接】pinwin .NET clone of DeskPins software 项目地址: https://gitcode.com/gh_mirrors/pi/pinwin 还在为频繁切换窗口而烦恼吗&#xff1f;参考资料被其他应用遮挡&#xff0c;重要会议窗口意外消失…

作者头像 李华
网站建设 2026/6/13 18:28:56

量子计算开发必看,VSCode远程调试连接难题一网打尽

第一章&#xff1a;量子计算开发必看&#xff0c;VSCode远程调试连接难题一网打尽在量子计算开发中&#xff0c;开发者常需在本地使用 VSCode 连接远程量子模拟器或真实量子硬件进行调试。然而&#xff0c;网络配置、SSH 认证与环境依赖等问题常常导致连接失败。掌握正确的远程…

作者头像 李华
网站建设 2026/6/13 19:53:26

ONNX模型下载终极指南:5种场景化解决方案让你告别龟速下载

ONNX模型下载终极指南&#xff1a;5种场景化解决方案让你告别龟速下载 【免费下载链接】models A collection of pre-trained, state-of-the-art models in the ONNX format 项目地址: https://gitcode.com/gh_mirrors/model/models 在AI项目开发中&#xff0c;ONNX模型…

作者头像 李华