深入理解JS中的Promise.race控制并发量 - 网站

深入理解JS中的Promise.race控制并发量

分类:JavaScript进阶教程_JavaScript技术文章 · 发布时间:2023-04-13 00:45 · 阅读:3944

这篇文章主要为大家介绍了JS中的Promise.race控制并发量的深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

开篇

比如在开发中会进行一系列的网络请求,但是有些情况需要控制一下网络请求请并发量。这里简单的用 Promise.raceawait 的特性来理解一下,如何对任务的并发量进行控制。

一、Promise.race

Promise.race 作用就是将多个异步任务包裹起来,当有一个完成的话,那么就会触发 then 事件。除了这个不错的特性方法外,await 这个关键字也比较有用,可以这样理解,await 后面的代码其实就相当于在 Promisethen 事件,即:如果异步任务没有完成的话,await 后面的逻辑是不会执行的,可以联想一下 generator 生成器里面的 yield 它能直接控制方法体里面的代码执行跟暂停,外界由一个迭代器 next 方法进行操控。

await 虽然好用,也只是在一个“异步”方法里需要“同步执行”的时候。then 的异步回调,其实也有它的用处。可以将完全不关心的事务放到里面,由它去执行到最后的结果。

二、并发效果展示

三、代码

class ConcurrencyTask { // 回调 callBack = ()=>{} // 任务 task = ()=>{} // 异步任务 promse = null constructor(task,callBack){ this.task = task this.callBack = callBack } // 开始进行任务 beginExecuteTask(){ this.promse = new Promise((resolve, reject)=>{ this.task(resolve,reject) }) return this.promse } // 类方法初始化 static SimulationTask(time){ return new ConcurrencyTask((resolve, _)=>{ console.log('开始执行延时任务:' + (time / 1000) + '秒!') setTimeout(()=>{ resolve('延时任务完成:' + (time / 1000) + '秒!') },time) },(res)=>{ console.log(res) }) } } class ConcurrencyQueue { // 最大并发数 maxConcurrencyNum = 1 // 并发任务集合 concurrencyTasks = [] // 正在进行的任务 executionTasks = [] constructor(maxConcurrencyNum,...concurrencyTasks){ this.maxConcurrencyNum = maxConcurrencyNum concurrencyTasks.forEach((task)=>{ this.concurrencyTasks.push(task) }) } // 开始执行 async beginExecuteTasks(){ // 当前执行任务 this.executionTasks = [] // 全部任务 let allExecutionTasks = [] for(let index = 0;index { this.executionTasks.splice(this.executionTasks.indexOf(task),1) if(task.callBack){ task.callBack(res) } }) // 不足直接添加 if(this.executionTasks.length = this.maxConcurrencyNum){ // 满足直接运行 await Promise.race(this.executionTasks.map((task)=>{ return task.promse })) } } } //全部任务完成 await Promise.all(allExecutionTasks.map((task)=>{ return task.promse })) console.log('任务全部完成') } } export { ConcurrencyTask ,ConcurrencyQueue } 

ESM 模式导入,需要 node 简单起一个服务

总结与思考

如果知识点不能结合应用场景,那么,它其实没有什么需要记忆的必要性。

以上就是深入理解JS中的Promise.race控制并发量的详细内容,更多关于JS Promise.race 控制并发量的资料请关注0133技术站其它相关文章!

标签:
JS Promise.race 并发控制

相关文章

一起来学习TypeScript的类型

这篇文章主要为大家详细介绍了TypeScript的类型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

JavaScript去除字符串两端空格的三种方法

本文主要介绍了JavaScript去除字符串两端空格的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

html2canvas图片跨域问题图文详解

我们在进行图片保存的时候经常会发现图片跨域了,下面下面这篇文章主要给大家介绍了关于html2canvas图片跨域问题的相关资料,需要的朋友可以参考下

JavaScript中Set基本使用方法实例

因为Set中存放的数据都是不会重复的数据,我们在编写JS代码的时候,因此我们可以利用Set来帮助我们更便捷地完成许多的事,下面这篇文章主要给大家介绍了关于JavaScript中Set基本使用方法的相关资料,需要的朋友可以参考下

详解vscode中console.log的两种快速写法

这篇文章主要介绍了vscode中console.log的两种快速写法,每种方法通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

返回分类 返回首页