当前位置: 首页 > news >正文

用Promise实现前端并发请求

/**
* 构造假请求
*/
async function request(url) {return new Promise((resolve) => {setTimeout(() => {resolve(url);},// Math.random() * 500 + 800,1000,);});
}

请求一次,查看耗时,预计应该是1s:

async function requestOnce() {const t1 = Date.now();const res = await request(1);console.log('一次请求耗时=', Date.now() - t1, 'ms,请求结果=', res);
}
requestOnce();

结果:在这里插入图片描述

12个数据发起并行请求,预计耗时1s:

async function requestAsync() {const t2 = Date.now();const requests = new Array(12).fill(2).map(request);const res2 = await Promise.all(requests);console.log('批量请求耗时=', Date.now() - t2, 'ms,请求结果=', res2, ',预计是 1000 ms');
}requestAsync();

结果:
在这里插入图片描述

12个请求并发进行,但限制最多3个请求可并发,预计耗时4s:

async function concurrencyRequest(urls, maxNum) {const buffer = [];//并发请求池,最多有maxNum个const t3 = Date.now();const res = [];for (let i = 0; i < urls.length && buffer.length < maxNum; ++i) {// console.log('next=', i);const promise = new Promise((resolve) => request(urls[i]).then(resolve));buffer.push(promise);promise.then((response) => (res[i] = response)).finally(() => {//每个请求完成后都从buffer中删除并保存响应const index = buffer.findIndex((item) => item === promise);buffer.splice(index, 1);// console.log('删除一个promise', buffer.length);});if (buffer.length === maxNum) {//必须等待buffer size小于maxNum才能继续请求await Promise.race(buffer);}}await Promise.all(buffer);//需要等待最后剩下的几个请求完成才算完成console.log('并发请求耗时=', Date.now() - t3, '请求结果=', res, '预计时间是 4000 ms');
}concurrencyRequest(new Array(12).fill(1).map((_, i) => i + 1),3,
);

在这里插入图片描述


http://www.mrgr.cn/news/37734.html

相关文章:

  • 【JAVA报错已解决】Java.lang.NullPointerException
  • 拿到一个新项目,如何开展测试
  • 银河麒麟V10系统下qt程序单独运行
  • g++的一些常用标识
  • 【C++打怪之路Lv4】-- 类和对象(中)
  • Python基础知识 (九)os模块、异常、异常的传递性
  • 矩阵转置的运算公式来了,附矩阵转置计算器
  • 使用代理IP数据采集都需要注意那些?
  • 【Linux】线程同步与互斥
  • 数据先行 -- Scale AI如何通过AI数据服务成为独角兽
  • npm install 卡住不动的六种解决方法
  • Harbor使用
  • 动态规划算法:12.简单多状态 dp 问题_打家劫舍_C++
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-26
  • MATLAB中的GPU计算:实现与应用
  • 案例精选 | 海门北部新城医学综合体智能化日志管理系统部署
  • RDL 按钮事件自定义弹框
  • 黄金短线交易策略:波动中的高效盈利之法
  • 设备管理与点巡检系统
  • 【Transformers实战篇2】练习之命名实体识别