news 2026/6/10 10:34:45

前端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/10 12:37:34

揭秘Docker容器间通信难题:智能Agent互联的3种高阶解决方案

第一章&#xff1a;智能 Agent 的 Docker 容器互联在分布式系统中&#xff0c;多个智能 Agent 常以独立服务的形式运行&#xff0c;Docker 容器化技术为这些 Agent 提供了轻量级、可移植的运行环境。实现容器间的高效通信是构建协同智能系统的关键步骤。网络模式选择 Docker 支…

作者头像 李华
网站建设 2026/6/10 14:47:49

ControlNet++革命性突破:10+条件精准控制图像生成的终极指南

ControlNet革命性突破&#xff1a;10条件精准控制图像生成的终极指南 【免费下载链接】controlnet-union-sdxl-1.0 项目地址: https://ai.gitcode.com/hf_mirrors/xinsir/controlnet-union-sdxl-1.0 在AI图像生成技术飞速发展的今天&#xff0c;ControlNet作为多条件控…

作者头像 李华
网站建设 2026/6/10 12:33:35

VSCode中Qiskit代码补全失效?5步精准排查并彻底解决

第一章&#xff1a;VSCode中Qiskit代码补全失效&#xff1f;5步精准排查并彻底解决在使用 VSCode 进行 Qiskit 量子计算开发时&#xff0c;代码补全功能突然失效是常见问题&#xff0c;可能由环境配置、扩展冲突或解释器选择错误引起。通过系统性排查可快速恢复智能提示功能。确…

作者头像 李华
网站建设 2026/6/10 12:35:24

终极指南:5分钟掌握专业架构图样式定制技巧

终极指南&#xff1a;5分钟掌握专业架构图样式定制技巧 【免费下载链接】diagrams :art: Diagram as Code for prototyping cloud system architectures 项目地址: https://gitcode.com/GitHub_Trending/di/diagrams 架构图样式定制是提升技术文档专业度的关键环节。本文…

作者头像 李华
网站建设 2026/6/10 14:46:45

西门子罗宾康单元控制板:性能与可靠的精密平衡

在西门子罗宾康高压变频器的模块化设计中&#xff0c;型号为A1A10000432.54M的单元控制板是该系列产品技术发展中的重要中间版本。作为功率单元的智能控制核心&#xff0c;它在系统性能、运行稳定性和可维护性之间实现了精密的平衡。 该控制板承担着功率单元的精确驱动与自主管…

作者头像 李华