前端技术-并发请求

并发请求

代码解释

定义了一个函数 concurRequest,用于并发请求多个 URL 并返回它们的响应结果。

function concurRequest(urls, maxNum) {return new Promise((resolve, reject) => {if (urls.length === 0) {resolve([]);return;}const results = [];let index = 0; // 下一个请求下标let count = 0; // 请求完成数// 发送请求async function request() {// 当index等于数组的长度表示完成if (index === urls.length) return;const i = index;const url = urls[index];index++;

定义了一个名为 concurRequest 的函数,它接受两个参数:一个 URL 数组和一个最大并发数。函数返回一个 Promise 对象,该对象在所有请求完成时解决并返回响应结果数组。

该函数首先检查 URL 数组是否为空,如果为空,则立即解决 Promise 并返回一个空数组。否则,它定义了一个名为 results 的空数组,用于存储每个 URL 的响应结果。它还定义了两个变量 indexcount,分别用于跟踪下一个请求的下标和已完成的请求数。

接下来,它定义了一个名为 request 的异步函数,用于发送请求。当 index 等于 URL 数组的长度时,表示所有请求都已完成,函数将立即返回。

在函数内部,它首先将 index 的值赋给 i,然后将 urls[index] 的值赋给 url,并将 index 的值递增。这样做是为了确保在请求完成之前,i 的值与 index 的值相同。

      try {const response = (await fetch(url)).json();results[i] = await response;} catch (error) {console.log(error.message);} finally {count++;// 判断所有请求是否都完成if (count === urls.length) {resolve(results);}request();}console.log(results);}

接下来,它使用 fetch 函数发送一个 GET 请求,并将响应转换为 JSON 格式。它将响应结果存储在 results[i] 中,并将 count 的值递增。无论请求成功或失败,都会递增 count 的值。

finally 代码块中,它检查是否已完成所有请求。如果是,则解决 Promise 并返回响应结果数组。否则,它再次调用 request 函数以发送下一个请求。

最后,它在控制台中记录响应结果数组,并在函数的末尾调用 request 函数以开始发送第一个请求。

整体代码展示

/*** 并发请求* @param {string[]} url 待请求的 url 数组* @param {number} maxNum 最大并发数*/
function concurRequest(urls, maxNum) {return new Promise((resolve, reject) => {if (urls.length === 0) {resolve([]);return;}const results = [];let index = 0; // 下一个请求下标let count = 0; // 请求完成数// 发送请求async function request() {// 当index等于数组的长度表示完成if (index === urls.length) return;const i = index;const url = urls[index];index++;try {const response = (await fetch(url)).json();results[i] = await response;} catch (error) {console.log(error.message);} finally {count++;// 判断所有请求是否都完成if (count === urls.length) {resolve(results);}request();}console.log(results);}const times = Math.min(maxNum, urls.length);for (let i = 0; i < times; i++) {request();}});
}const urls = [];
for (let i = 1; i <= 30; i++) {const url = `https://jsonplaceholder.typicode.com/todos/${i}`;urls.push(url);
}concurRequest(urls, 6).then((response) => {console.log(response);
});

在这里插入图片描述

输出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/108694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue2高德地图api】01-创建应用,获取key值

系列文章目录 【vue2高德地图api】视频效果&#xff08;手机端&#xff09;先看这里 文章目录 系列文章目录前言创建key&#xff08;2个&#xff09;1.1进入控制台1.2进入应用1.3 创建应用1.4输入名称和类型2.1 添加key2.2 选择对应信息2.3 创建js key和服务端 key 总结 前言 …

redis笔记

redis五大类型 redis 的key 都是string类型的, 所谓的五大类型 string set zset list hash 其实都是value的类型 在这些类型的底层还有更加底层的数据结构,所以redis的存储速度非常快 redis会根据你的value选择最合适的数据结构存储value 例如 set dc 666 和set dc1 66a type…

Qt/C++编写物联网组件/支持modbus/rtu/tcp/udp/websocket/mqtt/多线程采集

一、功能特点 支持多种协议&#xff0c;包括Modbus_Rtu_Com/Modbus_Rtu_Tcp/Modbus_Rtu_Udp/Modbus_Rtu_Web/Modbus_Tcp/Modbus_Udp/Modbus_Web等&#xff0c;其中web指websocket。支持多种采集通讯方式&#xff0c;包括串口和网络等&#xff0c;可自由拓展其他方式。自定义采…

排序算法-基数排序法(RadixSort)

排序算法-基数排序法&#xff08;RadixSort&#xff09; 1、说明 基数排序法与我们之前讨论的排序法不太一样&#xff0c;并不需要进行元素之间的比较操作&#xff0c;而是属于一种分配模式排序方式。 基数排序法比较的方向可分为最高位优先&#xff08;Most Significant Di…

修改51单片机中数组元素的值

在8051单片机中&#xff0c;code关键字用于将数据存储在ROM中。由于ROM是只读的&#xff0c;所以在运行时无法直接修改seven_seg数组中的值。 如果您想在main函数中修改seven_seg[1]的值为0xc0&#xff0c;您可以将seven_seg数组定义为可写的变量&#xff0c;而不是存储在ROM中…

支持语音与视频即时通讯项目杂记(一)

第一部分解释服务端的实现。 &#xff08;服务端结构&#xff09; 下面一个用于实现TCP服务器的代码&#xff0c;包括消息服务器&#xff08;TcpMsgServer&#xff09;和文件中转服务器&#xff08;TcpFileServer&#xff09;。 首先&#xff0c;TcpServer是TcpMsgServer和Tcp…

few shot learnning笔记

课程地址 https://youtu.be/hE7eGew4eeg?siKBM0lY7eY_AdD8Wr PPT地址 https://github.com/wangshusen/DeepLearning 第一节 Few-Shot Learning Basics 第二节 Siamese Network 第三节 Pretraining Fine Tuning&#xff08;以图像识别举例&#xff09; 基础 support set&…

上采样相关技术

一、参考资料 上采样和上卷积的区别 怎样通俗易懂地解释反卷积&#xff1f; 卷积和池化的区别、图像的上采样&#xff08;upsampling&#xff09;与下采样&#xff08;subsampled&#xff09; [读论文]用全卷积Res网络做深度估计 对抗生成网络GAN系列——DCGAN简介及人脸图像生…

MapReduce任务个数如何影响执行效率?性能优化从这里做起

在正文开始之前&#xff0c;请先来回答一下这个问题&#xff1a; 题目&#xff1a;输入为3个文件&#xff0c;a.txt 300MB,b.txt 100MB,c.txt 58.MB&#xff0c;使用MapReduce的example程序&#xff0c;计算Wordcount&#xff0c;请问&#xff0c;应该有多少个MapTask&#xf…

算法、推理、部署,面了40多个大佬的感想

今年三月份到现在陆陆续续面了40来个人&#xff0c;有实习生&#xff0c;有校招生&#xff0c;也有来社招的大佬们。面了挺久&#xff0c;有些总结和感想&#xff0c;发出来和大家交流交流&#xff0c;也趁着这个机会为之后参与校招的同学提供一些学习方向。 我面的岗位主要是…

计算机网络第2章-CDN(4)

视频流和内容分发网 HTTP流和DASH 在HTTP流中&#xff0c;视频只是存储在HTTP服务器中作为一个普通的文件&#xff0c;每个文件有有一个特定的URL。当用户要看视频时&#xff0c;客户与服务器之间创建一个TCP连接并发送HTTP GET请求。 HTTP流具有严重缺陷&#xff0c;即所有…

Windows系统创建Python虚拟环境

文章目录 1 创建虚拟环境的方法2 如何激活环境2.1 目录解读2.2 激活环境和安装第三方库 3 py源文件存放位置4 写在最后 1 创建虚拟环境的方法 在Windows上创建Python虚拟环境的常用方法有以下几种: 使用venv模块创建&#xff08;官方推荐&#xff09; Python内置的venv模块可以…

【大数据 - Doris 实践】数据表的基本使用(二):数据划分

数据表的基本使用&#xff08;二&#xff09;&#xff1a;数据划分 1.列定义2.分区与分桶2.1 Partition2.1.1 Range 分区2.1.2 List 分区 2.2 Bucket2.3 使用复合分区的场景 3.PROPERTIES3.1 replication_num3.2 storage_medium3.3 storage_cooldown_time 4.ENGINE 1.列定义 列…

quartz中jdbc.initialize-schema

never&#xff1a;从不进行初始化&#xff0c;也就是不清空数据库 always&#xff1a;每次都清空数据库进行初始化 embedded&#xff1a;只初始化内存数据库&#xff08;默认值&#xff09;

【扩散模型从原理到实战】Chapter2 Hugging Face简介

文章目录 Hugging Face的核心功能介绍Hugging Face开源库Hugging Face开源库Gradio工具介绍参考资料 Hugging Face是机器学习从业者协作和交流的平台&#xff0c;成立于2016年&#xff0c;在纽约和巴黎设有办事处&#xff0c;团队成员来自世界各地&#xff0c;远程办公。 致力于…

基于SSM的旅游信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Nacos源码 (7) Nacos与Spring

SpringCloud工程可以使用Nacos作为注册中心和配置中心&#xff0c;配置和使用非常简单&#xff0c;本文将简单介绍使用方式&#xff0c;并分析其实现方式。 SpringCloud工程集成Nacos SpringCloud工程使用Nacos非常简单&#xff0c;只需要引入依赖、编写配置参数、在启动类上…

多数元素[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个大小为n的数组nums&#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数大于n/2的元素。你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3…

堆排序代码模板

#include<iostream> using namespace std; const int N 1e5 9; int h[N], n, m, Size;//小根堆//u表示三个点中的根节点 void down(int u) {int t u;//设t为三个点中最小的那个点//如果左儿子存在并且小于根节点就将左儿子赋值给tif (u * 2 < Size && h[u …

什么是著作权?对此你了解多少?

在当今信息爆炸的时代&#xff0c;著作权成为一个备受关注的话题。创作是人类文明的重要组成部分&#xff0c;而著作权是创作者对自己作品的劳动和智慧的一种保护。很多人还不太了解著作权&#xff0c;那么希望看完此文&#xff0c;你会对它有一个新的认识。 一、著作权的概念 …