广告
返回顶部
首页 > 资讯 > 精选 >怎么在JavaScript中使用Promise控制并发请求个数
  • 257
分享到

怎么在JavaScript中使用Promise控制并发请求个数

2023-06-15 01:06:04 257人浏览 薄情痞子
摘要

这篇文章给大家介绍怎么在javascript中使用Promise控制并发请求个数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。串行:一个异步请求完了之后在进行下一个请求并行:多个异步请求同时进行串行举例:var&nbs

这篇文章给大家介绍怎么在javascript中使用Promise控制并发请求个数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

  • 串行:一个异步请求完了之后在进行下一个请求

  • 并行:多个异步请求同时进行

串行举例:

var p = function () {  return new Promise(function (resolve, reject) {    setTimeout(() => {      console.log("1000");      resolve();    }, 1000);  });};var p1 = function () {  return new Promise(function (resolve, reject) {    setTimeout(() => {      console.log("2000");      resolve();    }, 2000);  });};var p2 = function () {  return new Promise(function (resolve, reject) {    setTimeout(() => {      console.log("3000");      resolve();    }, 3000);  });};p()  .then(() => {    return p1();  })  .then(() => {    return p2();  })  .then(() => {    console.log("end");  });

如示例,串行会从上到下依次执行对应接口请求。

并行举例:

通常,我们在需要保证代码在多个异步处理之后执行,会用到:

Promise.all((promises: [])).then((fun: function));

Promise.all可以保证,promises数组中所有promise对象都达到resolve状态,才执行then回调。

var promises = function () {  return [1000, 2000, 3000].map((current) => {    return new Promise(function (resolve, reject) {      setTimeout(() => {        console.log(current);      }, current);    });  });};Promise.all(promises()).then(() => {  console.log("end");});

这时候考虑一个场景:

如果你的promises数组中每个对象都是Http请求,而这样的对象有几十万个。
那么会出现的情况是,你在瞬间发出几十万个http请求,这样很有可能导致堆积了无数调用栈导致内存溢出。
这时候,我们就需要考虑对Promise.all做并发限制。
Promise.all并发限制指的是,每个时刻并发执行的promise数量是固定的,最终的执行结果还是保持与原来的Promise.all一致。

三、代码实现

整体采用递归调用来实现:最初发送的请求数量上限为允许的最大值,并且这些请求中的每一个都应该在完成时继续递归发送,通过传入的索引来确定了urls里面具体是那个URL,保证最后输出的顺序不会乱,而是依次输出。

代码:

function multiRequest(urls, maxNum) { const len = urls.length; // 请求总数量 const res = new Array(len).fill(0); // 请求结果数组 let sendCount = 0; // 已发送的请求数量 let finishCount = 0; // 已完成的请求数量 return new Promise((resolve, reject) => {     // 首先发送 maxNum 个请求,注意:请求数可能小于 maxNum,所以也要满足条件2     // 同步的 创建maxNum个next并行请求 然后才去执行异步的fetch 所以一上来就有5个next并行执行     while (sendCount < maxNum && sendCount < len) {          next();     }     function next () {         let current = sendCount ++; // 当前发送的请求数量,后加一 保存当前请求url的位置         // 递归出口         if (finishCount >= len) {          // 如果所有请求完成,则解决掉 Promise,终止递归             resolve(res);             return;         }         const url = urls[current];         fetch(url).then(result => {             finishCount ++;             res[current] = result;             if (current < len) { // 如果请求没有发送完,继续发送请求                 next();             }         }, err => {             finishCount ++;             res[current] = err;             if (current < len) { // 如果请求没有发送完,继续发送请求                 next();             }         });     } });}

JavaScript可以做什么

1.可以使网页具有交互性,例如响应用户点击,给用户提供更好的体验。2.可以处理表单,检验用户的输入,并提供及时反馈节省用户时间。3.可以根据用户的操作,动态的创建页面。4使用JavaScript可以通过设置cookie存储在浏览器上的一些临时信息。

关于怎么在JavaScript中使用Promise控制并发请求个数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 怎么在JavaScript中使用Promise控制并发请求个数

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

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

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

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

下载Word文档
猜你喜欢
  • 怎么在JavaScript中使用Promise控制并发请求个数
    这篇文章给大家介绍怎么在JavaScript中使用Promise控制并发请求个数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。串行:一个异步请求完了之后在进行下一个请求并行:多个异步请求同时进行串行举例:var&nbs...
    99+
    2023-06-15
  • JavaScript如何利用Promise控制并发请求个数
    一、场景 假设现在有这么一种场景:现有 30 个异步请求需要发送,但由于某些原因,我们必须将同一时刻并发请求数量控制在 5 个以内,同时还要尽可能快速的拿到响应结果。 如图所示: ...
    99+
    2022-11-12
  • JavaScript怎么使用Promise实现并发请求数限制
    本篇内容主要讲解“JavaScript怎么使用Promise实现并发请求数限制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript怎么使用Promise实现并发请求数限制”吧!没有...
    99+
    2023-07-06
  • JavaScript使用Promise实现并发请求数限制
    目录没有Promise的并发请求使用Promise限制并发请求使用Promise实现并发请求数限制总结没有Promise的并发请求 在Web开发中,我们经常需要发起多个异步请求来获取...
    99+
    2023-05-16
    JavaScript Promise并发请求限制 Promise限制并发请求 JS promise限制并发
  • JS前端并发多个相同的请求怎么控制为只发一个请求
    这篇文章主要讲解了“JS前端并发多个相同的请求怎么控制为只发一个请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS前端并发多个相同的请求怎么控制为只发一个请求”吧!描述如下同时发多个相同...
    99+
    2023-07-02
  • 怎么在linux中使用shell中发送post请求
    本篇文章为大家展示了怎么在linux中使用shell中发送post请求,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。今天在linux中使用curl发送一个post请求时,带有json的数据,在发送时...
    99+
    2023-06-09
  • JAVA中怎么使用多线程并行请求数据
    在Java中使用多线程并行请求数据可以使用线程池来实现。以下是一个简单的示例代码:```javaimport java.util.c...
    99+
    2023-08-14
    JAVA
  • 如何在 Unix 环境下使用 Apache 服务器实现 PHP 并发请求的安全性控制?
    随着互联网的快速发展,网站的访问量也越来越大,如何保证服务器的安全性和性能就成为了网站开发人员必须要面对的问题。在 Unix 环境下,Apache 服务器是最流行的 Web 服务器之一,而 PHP 作为一种常用的网站开发语言,也经常与 A...
    99+
    2023-09-22
    并发 unix apache
  • 怎么使用cURL在PHP中POST请求增加参数
    今天小编给大家分享一下怎么使用cURL在PHP中POST请求增加参数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先,我们...
    99+
    2023-07-05
  • vue中怎么控制mock在开发环境使用
    这篇文章主要介绍“vue中怎么控制mock在开发环境使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue中怎么控制mock在开发环境使用”文章能帮助大家解决问题。vue控制mock在开发环境使用...
    99+
    2023-06-29
  • 怎么在JavaScript中使用join连接多个数组
    怎么在JavaScript中使用join连接多个数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,...
    99+
    2023-06-14
  • 怎么在CSS3中使用line-clamp属性控制文本行数
    本篇文章给大家分享的是有关怎么在CSS3中使用line-clamp属性控制文本行数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。说明:限制在一个块元素显示的文本的行数。-web...
    99+
    2023-06-08
  • 怎么在Java中利用Redis实现一个高并发计数器功能
    这篇文章主要介绍了怎么在Java中利用Redis实现一个高并发计数器功能,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、...
    99+
    2023-06-06
  • 使用java怎么在控制台中实现一个学生信息管理系统
    使用java怎么在控制台中实现一个学生信息管理系统?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重...
    99+
    2023-06-14
  • 你知道怎么在PHP中同时使用数组、并发和缓存吗?
    PHP是一门广泛使用的编程语言,它可以通过数组、并发和缓存来提高代码的性能和效率。在本文中,我们将探讨如何在PHP中同时使用这三个功能,以帮助您更好地开发高质量的应用程序。 一、使用数组 在PHP中,数组是一种非常有用的数据结构。它可以存储...
    99+
    2023-09-21
    数组 并发 缓存
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作