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

并发请求函数batchRequests

【题目】请实现如下的函数,可以批量请求数据,
【要求】

  1. 所有的请求在tasks参数中,同时可以通过max参数 控制请求的并发度
  2. 当所有的请求结束后,需要执行callback回调。
  3. 请求结果返回顺序需要和请求顺序保持一致
// 请实现如下的函数,可以批量请求数据,
// 所有的请求在tasks参数重,同时可以通过max参数 控制请求的并发度。
// 当所有的请求结束后,需要执行callback回调。// 参考答案
/*** 任务队列* @param tasks 请求数组* @param maxNum 最大并发数* @param callTime 错误重发次数* @param callback 回调*/
class TaskQueue {constructor(tasks, maxNum, callback) {this.queue = tasks;this.maxNum = maxNum;this.callback = callback;this.results = [];this.running = 0;this.next();}next() {while (this.running < this.maxNum && this.queue.length) {const task = this.queue.shift();const run = async (task) => {try {const res = await task(task);this.results.push(res);this.running--;this.next();} catch (e) {this.results.push(e);this.running--;this.next();}};run.call(this, task);this.running++;}if (typeof this.callback === 'function' && this.running == 0) {this.callback.call(null, this.results);}}
}// 以下为调用示例
var p1 = () => new Promise((resolve, reject) => setTimeout(reject, 3000, 'p1'));
var p2 = () => new Promise((resolve, reject) => setTimeout(resolve, 5000, 'p2'));
var p3 = () => new Promise((resolve, reject) => setTimeout(reject, 3000, 'p3'));
var p4 = () => new Promise((resolve, reject) => setTimeout(resolve, 3000, 'p4'));
var p5 = () => new Promise((resolve, reject) => setTimeout(reject, 3000, 'p5'));
var p6 = () => new Promise((resolve, reject) => setTimeout(resolve, 3000, 'p6'));
var p7 = () => new Promise((resolve, reject) => setTimeout(reject, 3000, 'p7'));
var tasks = [p1, p2, p3, p4, p5, p6, p7];
function sendRequest(ww, max, callback) {new TaskQueue(ww, max, callback);
}sendRequest(tasks, 2, (result) => {console.log(result);console.log('success');
});
http://www.xdnf.cn/news/12931.html

相关文章:

  • 类加载的过程
  • 【算法笔记】树套树
  • RSA和AES算法核心区别和原理解析
  • Python地理数学可视化:基于函数生成真实感地形
  • WebFuture 升级提示“不能同时包含聚集KEY和大字段””的处理办法
  • 【Docker 02】Docker 安装
  • 71常用控件_QHBoxLayout的使用
  • 浅谈未来汽车电子电气架构发展趋势中的通信部分
  • 【无人机】MavLink通讯协议的回调解析函数及状态机
  • AtCoder Beginner Contest 409(ABCDEF)
  • 深入解析对比学习:原理、应用与技术实现
  • 前端打包工具简单介绍
  • JavaWeb 三层架构简单介绍与案例实现
  • QEMU源码全解析 —— 块设备虚拟化(24)
  • 【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数
  • Java八股文——并发编程「场景篇」
  • 湖北理元理律师事务所实务手记:个人债务管理的理性突围
  • 65、.NET 中DllImport的用途
  • 轻量级数学竖式训练方案解析
  • Go语言多线程问题
  • Java 中字节流的使用详解
  • 用 AI 开发 AI:原汤化原食的 MCP 桌面客户端
  • UDP连接套接字与异步Socket通道详解
  • Java核心技术-卷I-读书笔记(第十二版)
  • ESP12E/F 参数对比
  • 单线程模型中消息机制解析
  • Map 接口
  • 【学习笔记】0-RTT
  • 强化学习入门:交叉熵方法数学推导
  • 支付系统架构图