返回顶部
首页 > 资讯 > 精选 >JS中的Promise.race控制并发量应用
  • 287
分享到

JS中的Promise.race控制并发量应用

2023-07-05 22:07:00 287人浏览 八月长安
摘要

这篇文章主要讲解了“js中的Promise.race控制并发量应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS中的Promise.race控制并发量应用”吧!一、Promise.rac

这篇文章主要讲解了“js中的Promise.race控制并发量应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS中的Promise.race控制并发量应用”吧!

一、Promise.race

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

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

二、并发效果展示

JS中的Promise.race控制并发量应用

三、代码

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.concurrencyTasks.length;index ++){            let task = this.concurrencyTasks[index]            // 开始并进行后续追踪            task.beginExecuteTask().then((res)=>{                this.executionTasks.splice(this.executionTasks.indexOf(task),1)                if(task.callBack){                    task.callBack(res)                }            })            // 不足直接添加            if(this.executionTasks.length < this.maxConcurrencyNum){                //待执行任务集合添加                this.executionTasks.push(task)                //全任务执行集合添加                allExecutionTasks.push(task)                if((this.concurrencyTasks.length - 1) == index || 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 简单起一个服务

<script type="module">    import { ConcurrencyTask ,ConcurrencyQueue } from "./concurrencyTask.js"    //添加任务    let concurrencyQueue = new ConcurrencyQueue(3,ConcurrencyTask.SimulationTask(1000),ConcurrencyTask.SimulationTask(6000),ConcurrencyTask.SimulationTask(5000),ConcurrencyTask.SimulationTask(4000),ConcurrencyTask.SimulationTask(2000),ConcurrencyTask.SimulationTask(3000))    //开始执行任务    concurrencyQueue.beginExecuteTasks()</script>

感谢各位的阅读,以上就是“JS中的Promise.race控制并发量应用”的内容了,经过本文的学习后,相信大家对JS中的Promise.race控制并发量应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JS中的Promise.race控制并发量应用

本文链接: https://lsjlt.com/news/355617.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS中的Promise.race控制并发量应用
    这篇文章主要讲解了“JS中的Promise.race控制并发量应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS中的Promise.race控制并发量应用”吧!一、Promise.rac...
    99+
    2023-07-05
  • 深入理解JS中的Promise.race控制并发量
    目录开篇一、Promise.race二、并发效果展示三、代码总结与思考开篇 比如在开发中会进行一系列的网络请求,但是有些情况需要控制一下网络请求请并发量。这里简单的用 Promise...
    99+
    2023-05-14
    JS Promise.race 控制并发量 JS Promise.race
  • js Promise并发控制数量的方法
    目录问题背景思路 & 实现问题 要求写一个方法控制 Promise 并发数量,如下: promiseConcurrencyLimit(limit, array, ite...
    99+
    2024-04-02
  • golang怎么控制并发数量
    在Go语言中,可以使用goroutine和channel来控制并发数量。 首先,可以使用goroutine来并发执行任务。例如,有一...
    99+
    2023-10-26
    golang
  • 实践和应用:Go语言的并发控制
    编程网今天将给大家带来《实践和应用:Go语言的并发控制》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议...
    99+
    2024-04-04
  • golang函数并发控制在web应用程序中的应用场景
    在 web 应用程序中,go 语言的函数并发控制可以实现以下场景:并行处理高并发 http 请求,避免同步处理的阻塞;并行执行耗时的任务,提升性能;使用 goroutine 池高效管理 ...
    99+
    2024-04-24
    web应用程序 并发控制 golang
  • Go语言并发控制实践与应用
    《Go语言并发控制实践与应用》 在当今信息技术高速发展的时代,对于软件开发领域来说,并发控制已经成为一个不可或缺的重要主题。在众多编程语言中,Go语言以其简洁高效的特性,成为开发者们喜...
    99+
    2024-04-02
  • 如何在ASP.NET应用程序中实现并发控制?
    在ASP.NET应用程序中实现并发控制是一个非常重要的问题。在这个过程中,我们需要考虑多个用户同时访问应用程序的情况,以确保应用程序在高负载下能够正常运行。 一、 什么是并发控制? 并发控制是指在多个用户同时访问应用程序时,通过一些手段来确...
    99+
    2023-07-20
    并发 spring 日志
  • golang函数并发控制在云原生架构中的应用
    go 语言在云原生架构中提供并发控制机制,包括 goroutine、channel 和 mutex。goroutine 是轻量级线程,而 channel 和 mutex 分别用于 gor...
    99+
    2024-04-24
    并发控制 云原生架构 golang
  • Go开发-使用Goroutine如何控制HTTP请求的并发量
    一、明确需求 我们使用 go 并发调用接口发起 HTTP 请求时,只需要在 func() 前面加上 go 关键字就很容易完成了,就是因为让并发变得如此简单,所以有的时候我们就需要控制一下并发请求的数量。 现在有个需求:本地有一千万条手机号,...
    99+
    2024-04-02
  • NoSQL中乐观并发控制和悲观并发控制的区别是什么
    在NoSQL数据库中,乐观并发控制和悲观并发控制是两种常见的并发控制策略。 乐观并发控制: 乐观并发控制假设冲突的概率较低,并...
    99+
    2024-05-07
    NoSQL
  • Golang中的并发控制和Go WaitGroup
    在Golang中,可以使用并发控制来管理多个goroutine的执行。其中,一个常见的并发控制机制是使用`sync.WaitGrou...
    99+
    2023-10-08
    Golang
  • MySQL 并发控制中的锁策略
    MySQL 锁的并发控制策略引言:在数据库系统中,为了保证数据的一致性和完整性,需要对并发操作进行控制。而锁机制是一种常用的并发控制策略。MySQL作为一种常用的关系数据库管理系统,也拥有自己的锁机制,下面我们就来详细了解MySQL锁的并发...
    99+
    2023-12-21
    并发 策略
  • golang控制并发数量的方法是什么
    在golang中,可以使用goroutine和channel来控制并发数量。以下是一些常用的方法: 使用goroutine和Wai...
    99+
    2023-10-21
    golang
  • Golang中怎么利用Goroutine控制并发
    这篇文章给大家介绍Golang中怎么利用Goroutine控制并发,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Channel在 Golang 语言中,Channel 不仅可以用于协程之间通信,还可以使用 Channe...
    99+
    2023-06-20
  • 流量控制在Golang中的应用技巧
    流量控制在Golang中的应用技巧 随着网络应用的发展,流量控制变得越来越重要。在Go语言中,通过一些技巧,我们可以有效地进行流量控制,保障系统的稳定性和性能。本文将介绍在Golang...
    99+
    2024-03-06
    技巧 golang 流控制 go语言
  • ASP 中常用的并发控制策略介绍
    在 ASP(Active Server Pages)应用程序中,由于多个用户同时访问同一个资源,容易导致数据冲突,因此并发控制是一个必不可少的问题。本文将介绍 ASP 中常用的并发控制策略。 乐观锁 乐观锁是一种乐观的并发控制策略,它...
    99+
    2023-11-12
    并发 数据类型 编程算法
  • JavaSemaphore实现高并发场景下的流量控制
    目录前言Semaphore介绍代码演示补充独占锁与共享锁公平锁与非公平锁可重入锁前言 在java开发的工作中是否会出现这样的场景,你需要实现一些异步运行的任务,该任务可能存在消耗大量...
    99+
    2024-04-02
  • JavaScript中实现并发控制的方法
    这篇文章将为大家详细讲解有关JavaScript中实现并发控制的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、并发控制简介在日常开发过程中,你可能会遇到并发控制的场景,比如控制请求并发数。那么在 ...
    99+
    2023-06-15
  • 什么是Java中的Git并发控制?
    Java中的Git并发控制是一种用于管理软件开发过程中多人同时修改同一代码库的机制。该机制确保在多人同时进行代码修改时,不会发生冲突和数据丢失。 Git是一种分布式版本控制系统,它允许多人同时对代码库进行修改,但这种并发修改可能会导致冲突和...
    99+
    2023-10-16
    git django 并发
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作