iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >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://www.lsjlt.com/news/355617.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 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+
    2022-11-12
  • Go开发-使用Goroutine如何控制HTTP请求的并发量
    一、明确需求 我们使用 go 并发调用接口发起 HTTP 请求时,只需要在 func() 前面加上 go 关键字就很容易完成了,就是因为让并发变得如此简单,所以有的时候我们就需要控制一下并发请求的数量。 现在有个需求:本地有一千万条手机号,...
    99+
    2022-10-22
  • golang控制并发数量的方法是什么
    在golang中,可以使用goroutine和channel来控制并发数量。以下是一些常用的方法: 使用goroutine和Wai...
    99+
    2023-10-21
    golang
  • 如何在ASP.NET应用程序中实现并发控制?
    在ASP.NET应用程序中实现并发控制是一个非常重要的问题。在这个过程中,我们需要考虑多个用户同时访问应用程序的情况,以确保应用程序在高负载下能够正常运行。 一、 什么是并发控制? 并发控制是指在多个用户同时访问应用程序时,通过一些手段来确...
    99+
    2023-07-20
    并发 spring 日志
  • JavaSemaphore实现高并发场景下的流量控制
    目录前言Semaphore介绍代码演示补充独占锁与共享锁公平锁与非公平锁可重入锁前言 在java开发的工作中是否会出现这样的场景,你需要实现一些异步运行的任务,该任务可能存在消耗大量...
    99+
    2022-11-12
  • Golang中的并发控制和Go WaitGroup
    在Golang中,可以使用并发控制来管理多个goroutine的执行。其中,一个常见的并发控制机制是使用`sync.WaitGrou...
    99+
    2023-10-08
    Golang
  • MySQL 并发控制中的锁策略
    MySQL 锁的并发控制策略引言:在数据库系统中,为了保证数据的一致性和完整性,需要对并发操作进行控制。而锁机制是一种常用的并发控制策略。MySQL作为一种常用的关系数据库管理系统,也拥有自己的锁机制,下面我们就来详细了解MySQL锁的并发...
    99+
    2023-12-21
    并发 策略
  • 如何基于JS实现Ajax并发请求的控制详解
    目录前言 Ajax的串行与并行Ajax的并发请求控制的两大解决方案 基于Promise递归实现 基于Class实现 代码展示 总结 前言 最近看到一个面试题,当然了,就是这篇文章的...
    99+
    2022-11-12
  • Golang中怎么利用Goroutine控制并发
    这篇文章给大家介绍Golang中怎么利用Goroutine控制并发,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Channel在 Golang 语言中,Channel 不仅可以用于协程之间通信,还可以使用 Channe...
    99+
    2023-06-20
  • Java高并发下的流量控制方法是什么
    今天小编给大家分享一下Java高并发下的流量控制方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。这个时候如果不做任何...
    99+
    2023-06-16
  • ASP 中常用的并发控制策略介绍
    在 ASP(Active Server Pages)应用程序中,由于多个用户同时访问同一个资源,容易导致数据冲突,因此并发控制是一个必不可少的问题。本文将介绍 ASP 中常用的并发控制策略。 乐观锁 乐观锁是一种乐观的并发控制策略,它...
    99+
    2023-11-12
    并发 数据类型 编程算法
  • 什么是Java中的Git并发控制?
    Java中的Git并发控制是一种用于管理软件开发过程中多人同时修改同一代码库的机制。该机制确保在多人同时进行代码修改时,不会发生冲突和数据丢失。 Git是一种分布式版本控制系统,它允许多人同时对代码库进行修改,但这种并发修改可能会导致冲突和...
    99+
    2023-10-16
    git django 并发
  • JavaScript中实现并发控制的方法
    这篇文章将为大家详细讲解有关JavaScript中实现并发控制的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、并发控制简介在日常开发过程中,你可能会遇到并发控制的场景,比如控制请求并发数。那么在 ...
    99+
    2023-06-15
  • 在 DBMS 中使用锁进行并发控制
    锁是 DBMS 中维护并发控制的一个组成部分。任何实现基于锁的并发控制的系统中的事务在获得所需的锁之前都无法读取或写入语句。基于锁的协议中有两种类型的锁。它们是:二进制锁 - 它们只能处于锁定或解锁两种状态之一。共享/独占锁 - 仅在执行读...
    99+
    2023-10-22
  • Spring框架中的并发控制机制有哪些?
    Spring框架是Java应用程序开发中非常常用的框架之一。在现代应用程序中,多线程和并发控制是必不可少的。在本文中,我们将探讨Spring框架中的并发控制机制。 Synchronized关键字 Synchronized关键字是Java...
    99+
    2023-07-20
    并发 spring 日志
  • mysql中并发控制的原理是什么
    mysql中并发控制的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、mysql的逻辑框架mysql逻辑框架图如下:最上层是处...
    99+
    2022-10-18
  • 字节跳动面试之如何用JS实现Ajax并发请求控制
    前言 讲真的,最近也很迷茫。关于技术、关于生活吧。也找了很多在大厂的朋友去聊,想需求一些后期发展的思路。这其中也聊到了面试,聊到了招聘中会给面试者出的一些题目。我正好也好久没面试了,...
    99+
    2022-11-12
  • 利用js实现Ajax并发请求限制请求数量的示例代码
    出现问题描述:当不确定异步请求个数时,为防止当一瞬间发生上百个http请求时,导致堆积了无数调用栈进而导致内存溢出问题。 要求:将同一时刻并发请求数量控制在3个以内,同时还要尽可能快...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作