news 2026/1/31 0:13:40

前端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/1/30 12:46:20

揭秘VSCode远程调试中的环境变量陷阱:99%开发者忽略的细节

第一章&#xff1a;揭秘VSCode远程调试中的环境变量陷阱在使用 VSCode 进行远程开发或调试时&#xff0c;环境变量的配置常成为开发者忽略却影响重大的环节。当本地与远程环境存在差异&#xff0c;未正确传递或设置环境变量&#xff0c;可能导致应用启动失败、认证错误或配置缺…

作者头像 李华
网站建设 2026/1/30 4:46:45

破解异地用工难题:终成国际一站式人事外包服务

还在为异地员工社保缴纳、各地政策不一而头痛吗&#xff1f;管理成本居高不下&#xff0c;合规风险如影随形&#xff1f;终成国际人事服务外包&#xff0c;是您破解这些难题的“金钥匙”。 我们成立于2010年&#xff0c;深耕人力资源服务领域16年&#xff0c;服务网络覆盖全国…

作者头像 李华
网站建设 2026/1/29 20:02:56

Echarts实现双Y轴,并设置刻度线对齐

在数据可视化场景中&#xff0c;双Y轴图表常用于展示具有不同量纲的数据。但默认配置下&#xff0c;左右Y轴的0刻度线、刻度线可能无法对齐&#xff0c;影响图表可读性。本文将详细介绍该功能的实现方法 1. 实现双Y轴 一个Y轴时的 yAxis 是对象 yAxis: {type: value,name:Y轴…

作者头像 李华
网站建设 2026/1/29 23:09:57

5步快速掌握Pyecharts Graph图:从零到实战的完整可视化指南

5步快速掌握Pyecharts Graph图&#xff1a;从零到实战的完整可视化指南 【免费下载链接】pyecharts &#x1f3a8; Python Echarts Plotting Library 项目地址: https://gitcode.com/gh_mirrors/py/pyecharts 还在为复杂的关系网络数据可视化而烦恼吗&#xff1f;当传统…

作者头像 李华
网站建设 2026/1/29 17:24:49

Q#单元测试+代码覆盖率(从零搭建VSCode监控环境)

第一章&#xff1a;Q# 程序的 VSCode 代码覆盖率在量子计算开发中&#xff0c;确保 Q# 程序的测试完整性至关重要。VSCode 作为主流开发环境&#xff0c;结合 .NET 测试工具链&#xff0c;可实现对 Q# 代码的覆盖率分析。尽管原生支持仍在演进&#xff0c;但借助间接工具链仍可…

作者头像 李华