news 2026/7/7 20:04:59

前端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/7/7 1:39:29

为什么你的LangGraph Agent跑不满CPU?:深度剖析Docker资源分配盲区

第一章&#xff1a;为什么你的LangGraph Agent跑不满CPU&#xff1f;&#xff1a;深度剖析Docker资源分配盲区在部署LangGraph Agent时&#xff0c;许多开发者发现即使负载增加&#xff0c;CPU利用率依然无法达到预期。这往往并非代码效率问题&#xff0c;而是Docker容器的资源…

作者头像 李华
网站建设 2026/7/7 13:54:06

GEO服务商五强对决:技术架构、平台覆盖与效果保障的全面横评

摘要与排名速览随着DeepSeek、Kimi、ChatGPT、文心一言等AI搜索工具日均请求量突破十亿次&#xff0c;用户获取信息的核心入口正发生结构性迁移。GEO&#xff08;生成式引擎优化&#xff09;应运而生&#xff0c;其目标不再是传统SEO的“网页点击”&#xff0c;而是让品牌内容被…

作者头像 李华
网站建设 2026/7/7 11:10:15

手机自己会智能调节铃声音量和振动?华为这个功能太“舒适”了

在几十人的会议室大家全神贯注开会时&#xff0c;突然响起的手机铃声总能瞬间拉满尴尬值&#xff1b;全家都睡了&#xff0c;突然催命连环CALL一响&#xff0c;刚睡着的宝宝又又又醒了&#xff1b;挤地铁通勤时&#xff0c;淹没在人潮噪音里的来电提示&#xff0c;又总让人错过…

作者头像 李华
网站建设 2026/7/7 8:40:09

实施CRM系统前,中小企业需要做好哪些内部准备以确保成功?

CRM系统的成功&#xff0c;三分靠技术&#xff0c;七分靠管理。许多企业误以为购买软件后便能自动解决所有问题&#xff0c;却忽视了内部的准备工作&#xff0c;导致系统上线后阻力重重。充分的内部准备是项目成功的先决条件。 CRM实施是一场涉及流程、数据和人的管理变革。如果…

作者头像 李华
网站建设 2026/7/7 8:03:28

Java Bug 避坑指南:小白与架构师的深夜 Debug 实录

夜深了&#xff0c;办公室的灯光下&#xff0c;刚入职的 Java 开发小白正抓耳挠腮地对着屏幕上的红字报错叹气。旁边的资深架构师大牛端着咖啡走了过来&#xff0c;看到小白的窘境&#xff0c;笑着拉了把椅子坐下。 “怎么了&#xff0c;又被 Bug 拦住去路了&#xff1f;”大牛…

作者头像 李华