一次调用多个接口按顺序返回结果


class Scheduler {constructor(max = 2) {// 最大运行数量this.maxNum = max// 当前运行数量this.runNum = 0// 事件队列this.runlist = []this.resolve = null// 运行完成的数量this.complateNum = 0}getRes(list, max) {this.list = listthis.maxNum = maxthis.result = []return new Promise((resolve, reject) => {this.resolve = resolve// 如果事件队列中的事件数量为0,直接返回结果if (this.list.length === 0) {this.resolve(this.result)return}this.runList()})}runList() {// 因为最后的结果需要按照顺序返回,所有给每个事件增加一个下标,用来存值for (let i = 0; i < this.list.length; i++) {this.runlist.push({index: i, cb: this.list[i]})}this.run()}run() {// 如果当前正在运行的数量小于最大运行数量,并且事件列表中有值while (this.runNum < this.maxNum && this.runlist.length) {// 从事件列表中取第一项的值然后运行let itempro = this.runlist.shift()let cb = itempro.cblet index = itempro.indexthis.runNum++cb.then(res => {this.result[index] = res}).catch(err => {this.result[index] = err}).finally(() => {this.complateNum++this.runNum--console.log(this.result)// 当所有的事件执行完成以后返回值if (this.complateNum == this.list.length) {this.resolve(this.result)} else {this.run()}})}}}
let proArr = []for (let i = 0; i < 100; i++) {let randomTime = Math.floor(Math.random() * 10) + 1proArr.push(new Promise((resolve) => {//模拟接口调用setTimeout(() => {resolve('-------'+i+'--------'+randomTime)}, randomTime*1000)}) )
}let scheduler = new Scheduler()
scheduler.getRes(proArr, 2).then(res => {console.log('res', res)
})

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

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

相关文章

Unity插件---Dotween

1.什么是DOTween DoTween 是由 Demigiant 开发的&#xff0c;被广泛应用于 Unity 游戏开发中。它是一个流行的动画插件&#xff0c;被许多开发者用于创建流畅、高效的动画效果&#xff0c;提升游戏体验。 2.DOTween的初始配置 ①set up 首先找到DOTween Unity Panel 的面板 点…

c# 本地化中英文切换

区域 线程默认区域为当前计算机所选区域 设置当前区域&#xff1a; Thread.CurrentThread.CurrentCulture new CultureInfo(“zh-cn”); 获取当前区域&#xff1a; Console.WriteLine(Thread.CurrentThread.CurrentCulture.ToString()); 区域名称&#xff1a; “zh-cn” 中文…

数据结构(Java实现)-栈和队列

栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 先进后出 栈的使用 栈的模拟实现 上述的主要代码 public class MyStack {private int[] elem;private int usedSize;public MyStack() {this.elem new int[5];}Overridepublic …

【数学建模竞赛】各类题型及解题方案

评价类赛题建模流程及总结 建模步骤 建立评价指标->评价体系->同向化处理&#xff08;都越多越好或越少越少&#xff09;->指标无量纲处理 ->权重-> 主客观->合成 主客观评价问题的区别 主客观概念主要是在指标定权时来划分的。主观评价与客观评价的区别…

Django实现音乐网站 ⒁

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是歌手页-全部歌手页功能开发。 目录 分出首页样式内容 创建首页样式文件 首页引入样式文件 全部歌手列表 创建路由 显示视图 引入分页实现库 视图方法 创建歌手首页 增加歌手跳转 导航条改活 首页增加…

作业33333333

一、正向解析 在开启DNS服务之前先将防火墙关闭。 systemctl stop firewalld.service 开启DNS服务&#xff0c;需要开启端先进行安装主软件&#xff0c;以及配置包管理软件 配置包管理软件一般会跟随主软件一起安装&#xff0c;如果没有手动安装一次就可以了。 安装完成之后&…

Android 6.0 Settings中添加虚拟键开关

添加系统默认键值 b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml-212,4 212,7 <!-- Default for Settings.Secure.NFC_PAYMENT_COMPONENT --><string name"def_nfc_payment_component"></string><!--mh.modify 2019060…

STM32H750+LAN8720无操作系统移植lwip

前言 本文提供移植好的工程&#xff0c;见本文绑定资源 环境 STM32CubeMX&#xff1a; V6.8.1 STM32H7 HAL Pack&#xff1a; V1.11.1 硬件连接 STM32H750 GPIO定义如下&#xff1a; LAN8720 GPIO定义如下&#xff1a; 连接方式如下&#xff1a; LAN8720       <—…

畅捷通T+用户中locked勒索病毒后该怎么办?勒索病毒解密数据恢复

Locked勒索病毒是一种近年来在全球范围内引起广泛关注的网络安全威胁程序。它是一种加密货币劫持病毒&#xff0c;专门用于加密用户的数据并要求其支付赎金。Locked勒索病毒通过攻击各种系统漏洞和网络薄弱环节&#xff0c;使用户计算机受到感染并被加密锁定时&#xff0c;无法…

Java--面试IT技术岗的小技巧

我们在找工作时&#xff0c;需要结合自己的现状&#xff0c;针对意向企业做好充分准备。作为程序员&#xff0c;你有哪些面试IT技术岗的技巧&#xff1f;你可以从以下几个方向谈谈你的想法和观点。 目录 方向一&#xff1a;分享面试IT公司的小技巧 方向二&#xff1a;IT技术…

ACE通信设计空间指导

ACE通信设计空间 通信是网络应用程序设计的基础。本章就通信设计空间做了领域分析,介绍了网络应用程序之间互相作用的规则、形式和抽象层次。 本章我们将讨论一下设计空间: 一、无连接协议和面向连接协议 所谓协议,就是一组规则,用来指定“控制信息”和“数据信息”如何…

easyexcel poi根据模板导出Excel

1.导入依赖 <!-- poi依赖--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version> </dependency> <!-- poi对于excel 2007的支持依赖--> <dependency…

基于Spring Boot 的 Ext JS 应用框架之coworkee

Ext JS 官方提供了一个人员管理的完整应用框架 - coworkee。该框架的显示如下: 该框架的布局特点如下: 布局方式: 左右布局, 左侧导航栏默认收合特点:左侧导航区占用空间小, 工作区较大, 适合没有二级导航栏,工作区需要显示的内容较多的系统。如果导航栏是横向底部,就…

typescript基础之never

TypeScript 的 never 类型是一种特殊的类型&#xff0c;它表示的是那些永远不存在的值的类型。例如&#xff0c;一个抛出异常或无限循环的函数的返回值类型就是 never&#xff0c;因为它们永远不会返回任何值。never 类型是所有类型的子类型&#xff0c;也就是说&#xff0c;任…

❤ 给自己的mac系统上安装java环境

❤ 给自己的mac系统上安装java环境 &#x1f353; 作为前端工程师如何给自己的mac系统上安装java环境 &#x1f34e; 最近因为自己的一些项目需求&#xff0c;mac电脑上需要安装一些后台的java环境&#xff0c;用来跑后台的java程序&#xff0c;于是从一个前端工程师的角度安…

域名解析与http服务器实现原理

域名解析函数gethostbyname struct hostent *gethostbyname(const char *name); 主机结构在<netdb.h>中定义如下&#xff1a; 结构的成员包括&#xff1a; h_name&#xff1a;主机的正式名称 h_aliases&#xff1a;主机的备用名称数组&#xff0c;以NULL结尾指针 h_…

C语言——程序执行的三大流程

顺序 : 从上向下&#xff0c; 顺序执行代码分支 : 根据条件判断&#xff0c; 决定执行代码的分支循环 : 让特定代码重复的执行

jsp+servlet+mysql阳光网吧管理系统

项目介绍&#xff1a; 本系统使用jspservletmysql开发的阳光网吧管理系统&#xff0c;纯手工敲打&#xff0c;系统管理员和用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;修改个人信息、修改密码&#xff1b;机房类型管理&#xff1b;机房管理&#xff1b;机位…

【腾讯云 Cloud studio 实战训练营】真正做到让你的开发成本只在编码

文章目录 写在前面CODINGCloud studio工具在线编码运行项目代码上传Cloud Studio 开发贪吃蛇写在最后 写在前面 期待已久的体验活动终于来了&#xff0c;Clound Studio用了才知道有多爽&#xff0c;Cloud Studio 是基于浏览器的集成式开发环境 (IDE)&#xff0c;为开发者提供了…

HTTP 服务器(基于go实现)

编写一个 HTTP 服务器&#xff0c;接收客户端 request&#xff0c;并将 request 中带的 header 写入 response header 解析HTTP请求头 import ("fmt""net/http" )func headers(w http.ResponseWriter, r *http.Request) {// 将request中的信息写入到 w中…